MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Agregacja Mongodb z 2 kolekcjami

W zależności od potrzeb twojego systemu, myślę, że projekt modelu można uprościć, tworząc tylko jedną kolekcję, która łączy wszystkie atrybuty w collection1 i collection2 . Jako przykład:

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);

w którym możesz następnie uruchomić potok agregacji

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));
});

Jednak przy obecnym projekcie schematu musisz najpierw uzyskać identyfikatory kolekcji1, które mają wartość isBook true w collection2 a następnie użyj tej listy identyfikatorów jako $match zapytanie w collection1 agregacja modeli, coś takiego:

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. Automatyczne inkrementowanie w MongoDB w celu przechowywania sekwencji unikalnego identyfikatora użytkownika

  2. Jak sortować z sumą 2 pól w MongoDB

  3. Meteor.js - sposoby na wyszukiwanie użytkowników w wielu kolekcjach

  4. Jak tworzyć indeksy w MongoDB przez .NET

  5. Nie można połączyć się z mongodb za pomocą komputera ip