我的文档结构如下:
{
"_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吗?
答案 0 :(得分:1)
实际上,您的收藏中有2个文档,每个文档都嵌入相关数据(BLOODGAS数组)。当您查询集合时,您会尝试计算与您的查询匹配的文档数,不是相关BLOODGAS的数量。 你必须将BLOODGAS分成一个专门的集合来计算:(或者用你的开发语言或平台解析数组。但你不能将BLOODGAS视为文档。
答案 1 :(得分:1)
如果您仍处于开发的早期阶段,您可能需要考虑使用具有新aggregation framework的2.1 dev版Mongo。我相信在这个例子中你会$unwind
BLOODGAS数组,然后进行分组和计数。
此功能将在下一个稳定的2.2版本中发布。