I am using mongoose to setup models for MongoDb. I have gotten everything to work except populate in the mongoose query.
My setup is below 1) DB1 is used to store transaction details 2) DB2 is used to store user details
I have defined models and schema separately for each DBs. They independently work fine. However, when i refer to a schema that is in DB1 to DB2 i get the error
MissingSchemaError: Schema hasn't been registered for model "SellerDb".
I am wondering whether it is possible to share schemas and link documents between two Dbs using the same connection port?
I appreciate your help.
data-connection.js
var mongoose = require('mongoose'),
mongoURI = 'mongodb://localhost:27020';
module.exports = db_conn = mongoose.createConnection(mongoURI);
Invoice-detail.js
// load the things we need
var mongoose = require('mongoose');
var Schema = mongoose.Schema, ObjectId = Schema.ObjectId;
var myConnection = require('../connection/data_connection.js');
var SellerDB = require('../models/seller-details');
var BuyerDB = require('../models/buyer-details');
//var invoice_db = mongoose.createConnection('localhost:27020/invoicedetail'); //connect to invoice DB
var itemdetailSchema = new Schema({
itemcode : Number,
itemname : String,
category : String,
unitprice : Number,
quantity : Number,
subtotal_ln : Number
});
var testSchema = new Schema({
name:String
});
// define the schema for our invoice details model
var invoicedetailSchema = new Schema({
seller_name : String,
seller_id : { type: ObjectId, ref: 'SellerDB' },
buyer_name : String,
buyer_id : { type: ObjectId, ref: 'BuyerDB '},
transaction_id : String,
transaction_date : Date,
paymenttype : String,
item_details : [itemdetailSchema],
tax : Number,
beforetax : Number,
aftertax : Number
});
function Seller_find(callback, seller_name)
{
SellerDB.findOne({'seller_email' : seller_name}, function(err, seller) {
if(err) {
callback(err);
}
else {
console.log('found '+ seller);
callback(err, seller);
}
});
}
invoicedetailSchema.pre('save', function(next) {
// SET SELLER AND BUYER IDs BEFORE SAVING
var self = this;
SellerDB.seller_idAsync(self.seller_name)
.then( function (seller)
{
self.seller_id=seller._id;
return seller;
})
.then (function (buyer){
return BuyerDB.buyer_idAsync(self.buyer_name)
.then( function (buyer){
self.buyer_id=buyer._id;
return buyer;
});
})
.finally(function ( es){
next();
})
.catch(
function (e) {
console.log ('errr ' + e );
//next(e);
});
});
var Invoice_Buyer = myConnection.useDb('invoicedetail').model('BuyerDB', BuyerDB.schema);
var Invoice_Seller = myConnection.useDb('invoicedetail').model('SellerDB', SellerDB.schema);
var Invoice_Detail = myConnection.useDb('invoicedetail').model('InvoiceDetail', invoicedetailSchema);
// create the model for seller and expose it to our app
module.exports = {
// Invoice_Buyer: Invoice_Buyer,
// Invoice_Seller: Invoice_Seller,
Invoice_Detail: Invoice_Detail,
testS:testS
};
seller-details.js
// load the things we need
// load the things we need
var mongoose = require('mongoose');
var myConnection = require('../connection/data_connection.js');
var promise = require("bluebird");
mongoose.connection.on('error', function(err){});
// var seller_db = seller_mongoose.createConnection('localhost:27020/sellerDB'); //connect to seller DB
// seller_db.on('error', console.error.bind(console, 'connection error:'));
// seller_db.once('open', function callback () {
// });
// var categorylistSchema = new Schema({
// category : String //category of products sold
// });
// define the schema for our seller details model
var sellerdbSchema = new mongoose.Schema({
seller_name : String,
seller_email : String,
seller_logo : String,
seller_st_addr : String,
seller_city : String,
seller_state : String,
seller_zipcode : String,
seller_country : String,
seller_category : String, // This should be seller category : coffee shop retalier etc. Product level category should be in item detail. // Array of category of products sold.
customer_flag : String // Set to either Buyer or Seller for appropriate DB retrieval.
});
sellerdbSchema.statics.seller_id = function(_email, cb) {
return this.findOne({ 'seller_email': _email }, cb);
};
var SellerDB = myConnection.useDb('sellerDB').model('SellerDB', sellerdbSchema);
promise.promisifyAll(SellerDB);
promise.promisifyAll(SellerDB.prototype);
// create the model for seller and expose it to our app
module.exports = SellerDB;