2017-04-17 35 views
2

Hya!MongoDBマングース・アグリゲーション/数学操作

私はちょうどMongoDBを勉強していて、mongoのMongoose(nodejsドライバ)で$ aggregationメソッドがどのくらい正確に動作しているかを理解することに問題があります。正直言って、私はmongooseのドキュメントでコード例を見つけることができませんでした(私は自分のサイトで[検索]オプションも見つけられませんでした)[0120:Googleサイト:mongoosejs.comが私を助けます]

これを説明し、私の質問に答えるのに役立ちます。

私はフィールドで、私のコレクションの中で様々な文書を持っている必要があり例えば

{ "_id":001, "item":47139, "total_price": 560000, "quantity": 56, "lastModified" : 1491748073000 } 
{ "_id":001, "item":xxxxx, "total_price": yyyyy, "quantity": zz, "lastModified" : 1491748073000 } 
{ "_id":001, "item":47139, "total_price": 1750000, "quantity": 150, "lastModified" : 1491748073000 } 

を、私はidを持つドキュメントに対するすべての「量」をSUMM $たい:47139とタイムスタンプ:1491748073000.として、今のところこのコード(JS)は正常に動作し、必要なデータを提供します:

var server = mongoose.model('Name_of_my_Schema',Schema); 

server.find({ lastModified : 1491748073000, item : 47139 }, null, {sort: 'buyout'},function (err, res) { 
    total = 0; 
    for (i = 0; i < res.length; i++) { //sorry, map.reduce, but not this time 
     total += res[i].quantity; 
    } 
    console.log(total); //in this case total = 256 
}); 

この操作はマングースでは可能ですか?

server.aggregate().match({ 
    lastModified : 1491748073000, 
    item : 47139 
    }).exec(function (err, result){ 
    console.log(result); 
    console.log(err); 
}); 

をし、グループに必要なデータと、{$合計:「数量」を} $グループを使用:Mongoのドキュメントによれば、私は、これらのように、ドキュメントの必要な配列を一致させるため、このコードを使用する必要があり、しかし、私はすべき次は?なぜ私はすべての量の合計を受信したいのですが、私は$ groupを使うべきですか?誰かが私に何か不足しているという手がかりを与えることができますか?

答えて

1

あなたが正しく言ったように、合計集計を行うパイプラインステップが$groupの行方不明です。

server.aggregate() 
    .match({ 
     "lastModified": 1491748073000, 
     "item": 47139 
    }) 
    .group({ 
     "_id": null, 
     "total": { "$sum": "$quantity" } 
    }) 
    .exec(function (err, result){ 
     console.log(result); 
     console.log(err); 
    }); 

又はオペレータの配列として:のようにパイプラインを完成

server.aggregate([ 
    { "$match": { "lastModified": 1491748073000, "item": 47139 } }, 
    { "$group": { "_id": null, "total": { "$sum": "$quantity" } } } 
]).exec(function (err, result){ 
    console.log(result); 
    console.log(err); 
}); 
関連する問題