首先,发表评论。对于这个问题,所描述的集合被简化了。我很有兴趣了解如何操作mongo db并获取数据的统计信息。
假设我有一个测试结果的集合。架构为:
Results {
_id: ObjectId
TestNumber: int
result: String // this contains "pass" or "fail"
// additional data
}
因为每个测试可以有许多报告,所以很可能每个
TestNumber
都出现在多个文档中。如何在整个集合中执行返回此信息的查询:
TestNumber | count of result == "pass" | count of result == "fail"
最佳答案
您可以使用以下聚合操作流水线连接在一起:Group
基于其testNumber
和类型的所有文档result
在一起,所以对于每个testnumber,我们都有two
每组,一组用于fail
,另一组用于pass
,计数为
每组文件。Project
包含结果的组的变量“pass”
通过,另一组不通过。Group
根据testnumber再次将文档组合在一起,并且
将pass和fail文档推送到一个数组中。Project
所需的字段。
代码:
Results.aggregate([
{$group:{"_id":{"testNumber":"$testNumber","result":"$result"},
"count":{$sum:1}}},
{$project:{"_id":0,
"testNumber":"$_id.testNumber",
"result":{$cond:[{$eq:["$_id.result","pass"]},
{"pass":"$count"},
{"fail":"$count"}]}}},
{$group:{"_id":"$testNumber",
"result":{$push:"$result"}}},
{$project:{"testNumber":"$_id","result":1,"_id":0}}
],function(a,b){
// post process
})
样本数据:
db.collection.insert([
{
"_id":1,
"testNumber":1,
"result":"pass"
},
{
"_id":2,
"testNumber":1,
"result":"pass"
},
{
"_id":3,
"testNumber":1,
"result":"fail"
},
{
"_id":4,
"testNumber":2,
"result":"pass"
}])
样品O/P:
{ "result" : [ { "pass" : 1 } ], "testNumber" : 2 }
{ "result" : [ { "fail" : 1 }, { "pass" : 2 } ], "testNumber" : 1 }
迭代
doc.result
将为您提供testNumber
的通过计数和失败测试数。关于node.js - Mongoose集合统计/操作查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27109036/