计算文档中的特定键

时间:2012-03-27 10:23:58

标签: mongodb

我的文档结构如下:

{
  "_id" : ObjectId("4f6b0f6aaa294de8ff476bf3"),
  "BLOODGAS" : [{
      "ABG_PH" : 0.0, //<< one
      "XYZ" : 2.0,
      "PQR" : 3.0
    }]
}
{
  "BLOODGAS" : [{
      "ABG_PH" : 1.0, //<< two
      "XYZ" : 2.0,
      "PQR" : 3.0
    }, {
      "ABG_PH" : 0.0, //<< three
      "XYZ" : 1.0,
      "PQR" : 2.0
    }, {
      "ABG_PH" : 0.0, //<< four
      "XYZ" : 5.0,
      "PQR" : 6.0
    }],
  "_id" : ObjectId("4f6b0f11aa294de8ff476bf2")
}

现在根据当前的结构,我有完全四个个实例,其中包含密钥ABG_PH

但是通过以下查询我得到一个计数: 2

db.myCollection.find({ "BLOODGAS.ABG_PH" : 0 }).count();

我应该计算 3 ,因为我有3个ABG_PH个实例,其值 0

使用上述数据我需要什么样的查询才能获得3分。

更新:如果使用简单的查询无法做到这一点,我可以在这里使用map reduce吗?

2 个答案:

答案 0 :(得分:1)

实际上,您的收藏中有2个文档,每个文档都嵌入相关数据(BLOODGAS数组)。当您查询集合时,您会尝试计算与您的查询匹配的文档数不是相关BLOODGAS的数量。 你必须将BLOODGAS分成一个专门的集合来计算:(或者用你的开发语言或平台解析数组。但你不能将BLOODGAS视为文档。

答案 1 :(得分:1)

如果您仍处于开发的早期阶段,您可能需要考虑使用具有新aggregation framework的2.1 dev版Mongo。我相信在这个例子中你会$unwind BLOODGAS数组,然后进行分组和计数。

此功能将在下一个稳定的2.2版本中发布。