与mongoose查询和总结

我想获取所有的用户user_totaldocsuser_totalthings并想要总结这些variables。

怎么可能? 这里是用户模式:

 var user_schema = mongoose.Schema({ local : { ... ... user_id : String, user_totaldocs : Number, user_totalthings : Number .... } }); 

您可以使用聚合pipe道将计算的字段添加到结果中。 下面有一些使用mongo shell的例子,但Mongoose的Aggregate()helper中的语法是相似的。

例如,要计算总和(每个用户文档),可以在$project阶段使用$addexpression式 :

 db.user.aggregate( // Limit to relevant documents and potentially take advantage of an index { $match: { user_id: "foo" }}, { $project: { user_id: 1, total: { $add: ["$user_totaldocs", "$user_totalthings"] } }} ) 

要计算多个文档中的总计,您需要使用具有$sum累加器的$group阶段 ,例如:

 db.user.aggregate( { $group: { _id: null, total: { $sum: { $add: ["$user_totaldocs", "$user_totalthings"] } }, totaldocs: { $sum: "$user_totaldocs" }, totalthings: { $sum: "$user_totalthings" } }} ) 

你可能只想要一个total场; 我已经添加了totaldocstotalthings作为计算多个领域的例子。

null的组_id将组合来自传递给$group阶段的所有文档的值,但是您也可以在此处使用其他条件(例如按user_id分组)。

你可以使用mongodb提供的聚合框架。 为你的情况 –

如果您想要获取整个集合(对所有用户都意味着)的user_totaldocs和user_totalthings总和,请执行 –

 db.user_schemas.aggregate( [ { $group : { user_id : null, user_totaldocs: { $sum: "$user_totaldocs"}, // for your case use local.user_totaldocs user_totalthings: { $sum: "$user_totalthings" }, // for your case use local.user_totalthings count: { $sum: 1 } // for no. of documents count } } ]) 

要为集合中的特定用户(假设用户有多个文档)合计user_totaldocs和user_totalthings,这将为每个用户返回总和,DO –

 db.user_schemas.aggregate( [ { $group : { user_id : "$user_id", user_totaldocs: { $sum: "$user_totaldocs"}, // for your case use local.user_totaldocs user_totalthings: { $sum: "$user_totalthings" }, // for your case use local.user_totalthings count: { $sum: 1 } // for no. of documents count } } ]) 

无需提供个人用户标识。

欲了解更多信息,请阅读:1. http://docs.mongodb.org/manual/reference/operator/aggregation/group/#pipe._S_group 2. http://docs.mongodb.org/manual/core/aggregation/