आपके सिस्टम की ज़रूरतों के आधार पर, मुझे लगता है कि केवल एक संग्रह बनाकर मॉडल डिज़ाइन को सरल बनाया जा सकता है जो collection1
में सभी विशेषताओं को मिला देता है। और collection2
. उदाहरण के तौर पर:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var accountSchema = new Schema({
moneyPaid:{
type: Number
},
isBook: {
type: Boolean,
}
}, {collection: 'account'});
var Account = mongoose.model('Account', accountSchema);
जिसमें आप फिर एकत्रीकरण पाइपलाइन चला सकते हैं
var pipeline = [
{
"$match": { "isBook" : true }
},
{
"$group": {
"_id": null,
"total": { "$sum": "$moneyPaid"}
}
}
];
Account.aggregate(pipeline, function(err, results) {
if (err) throw err;
console.log(JSON.stringify(results, undefined, 4));
});
हालांकि, वर्तमान स्कीमा डिज़ाइन के साथ आपको पहले संग्रह1 के लिए आईडी प्राप्त करनी होगी जिसका collection2
में isBook सही मान है और फिर उस आईडी सूची का उपयोग $match
. के रूप में करें collection1
. में क्वेरी मॉडल एकत्रीकरण, निम्न जैसा कुछ:
collection2Model.find({"isBook": true}).lean().exec(function (err, objs){
var ids = objs.map(function (o) { return o.coll_id; }),
pipeline = [
{
"$match": { "_id" : { "$in": ids } }
},
{
"$group": {
"_id": null,
"total": { "$sum": "$moneyPaid"}
}
}
];
collection1Model.aggregate(pipeline, function(err, results) {
if (err) throw err;
console.log(JSON.stringify(results, undefined, 4));
});
});