MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Mongodb агрегиране с 2 колекции

В зависимост от това какви са нуждите на вашата система, мисля, че дизайнът на модела може да бъде опростен чрез създаване само на една колекция, която обединява всички атрибути в 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, които имат истинска стойност isBook в collection2 и след това използвайте този списък с идентификатори като $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));
    });
});



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Свързване към MongoDB чрез PDO драйвер

  2. Mongoid Association Създаване на (нежелани) записи

  3. Mongoose Aggregation не филтрира по въведена дата

  4. Как да извлека цялата стойност на вградения документ с помощта на официалния C# драйвер за MongoDB?

  5. Случайни документи от MongoDB, използващи spring-data