首先,发表评论。对于这个问题,所描述的集合被简化了。我很有兴趣了解如何操作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/

10-16 09:30