MongoDBmongoose聚合/math运算

HYA!

我只是在研究MongoDB,并且了解Mongoose(nodejs驱动程序)在mongo中究竟是如何使用$ aggregation方法的问题。 说实话,我找不到在mongoose文档中的任何代码示例(我甚至没有在他们的网站上find[search]选项[谷歌网站:mongoosejs.com帮助我])

所以,我希望有人能帮我解释一下,回答我的问题。

例如,我在我的collections中有各种文档,包含字段:

{ "_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 } 

我想$ summ所有的“数量”的文件与id: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 }); 

但是有可能通过mongoose做这个操作吗? 根据mongo文档,我应该使用此代码来匹配必要的文档数组,如下所示:

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

然后使用$ group来分组必要的数据和{$ sum:“quantity”},但接下来我应该做什么? 为什么我要使用$ group,如果我只想收到所有数量的summ? 有人能给我一个线索,我错过了什么?

正如您所说的,您错过了$grouppipe道步骤来完成汇总。 完成pipe道:

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