MongoDB-对数组中的嵌套文档进行计数的查询
MongoDB-布局 我是MongoDB的新手,所以请原谅我使用了错误的术语 鉴于上述布局(附图),我需要提出两个问题: 用例1:一种查询,用于输出给定文档标识符的someArrayField下的元素总数。 例如,对于上面的布局,我希望查询为someArrayField返回2,因为它下面有2个元素作为嵌套文档 用例2:一个查询,该查询将为MongoDB-对数组中的嵌套文档进行计数的查询,mongodb,mongodb-query,Mongodb,Mongodb Query,MongoDB-布局 我是MongoDB的新手,所以请原谅我使用了错误的术语 鉴于上述布局(附图),我需要提出两个问题: 用例1:一种查询,用于输出给定文档标识符的someArrayField下的元素总数。 例如,对于上面的布局,我希望查询为someArrayField返回2,因为它下面有2个元素作为嵌套文档 用例2:一个查询,该查询将为集合1下的每个文档输出someArrayField下的元素总数(集合1可以包含具有类似布局的多个文档) 我知道,我需要以某种方式使用“聚合管道”来获得期望的结
集合1
下的每个文档输出someArrayField下的元素总数(集合1
可以包含具有类似布局的多个文档)
我知道,我需要以某种方式使用“聚合管道”来获得期望的结果,但是由于缺乏NoSQL的经验,我在这里有些挣扎
因此,非常感谢您的帮助 给定以下测试集:
{
"_id" : ObjectId("5b453cc7799fb211dc44a1e8"),
"id" : 1.0,
"nestedDoc" : {
"nestedArray" : [
{
"field1" : "value1",
"field2" : "value2",
"field3" : "value3"
},
{
"field1" : "value11",
"field2" : "value21",
"field3" : "value31"
},
{
"field1" : "value12",
"field2" : "value22",
"field3" : "value32"
}
]
}
}
{
"_id" : ObjectId("5b453d23799fb211dc44a1e9"),
"id" : 2.0,
"nestedDoc" : {
"nestedArray" : [
{
"field1" : "value1",
"field2" : "value29",
"field3" : "value39"
},
{
"field1" : "value118",
"field2" : "value281",
"field3" : "value381",
"field4" : "value281"
},
{
"field1" : "value172",
"field2" : "value272",
"field3" : "value372"
}
]
}
}
用例1:
运行以下聚合查询:
db.test1.aggregate(
[
// Stage 1 : filter documents
{
$match: {
id:1
}
},
// Stage 2 : count array size and return only it.
{
$project: {
arraySize:{$size:"$nestedDoc.nestedArray"},
_id:0
}
},
]
);
**用例2**运行以下命令:
db.test1.aggregate(
[
// Stage 1 count array size for each document
{
$project: {
_id:0,
arraySize:{$size:"$nestedDoc.nestedArray"}
}
},
// Stage 2 group all documents and sum arraySize
{
$group: {
_id:null,
totalArraysSize:{$sum:"$arraySize"}
}
},
]
);
太好了这就是我想要的用例1。然而,我试图调整你的用例2解决方案,以获得每个文档的计数,但未能成功完成。好吧,我误解了用例2。如果需要每个文档的数组大小,只需删除组阶段。