Mongoose集合统计/操作查询

时间:2014-11-24 16:04:50

标签: node.js mongodb mongoose

  • 首先,评论。对于这个问题,所描述的集合是简化的。我很了解如何操作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"

1 个答案:

答案 0 :(得分:1)

您可以使用以下汇总操作:

  • Group所有文件均基于testNumber及其类型 result在一起,因此对于每个testNumber,我们都会two 每个分组,一个用于fail,另一个用于pass,其数量为。{ 每组中的文件。
  • Project包含结果的组的变量“pass” 传递,而另一组失败。
  • Group再次根据testNumber汇总文档,以及 将传递和失败文档推送到数组中。
  • 根据需要
  • 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的通过次数和失败的测试次数。