MongoDB - 查询计算数组中的嵌套文档
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB - 查询计算数组中的嵌套文档相关的知识,希望对你有一定的参考价值。
MongoDB - 布局
我是MongoDB的新手,如果我在这里使用错误的术语,请原谅我。
鉴于上面的布局(附图),我需要提出两个查询:
用例1:一个查询,它将输出someArrayField下给定文档标识符的元素总数。例如,对于上面的布局,我希望查询为someArrayField返回2,因为它下面有2个元素作为嵌套文档。
用例2:一个查询,它将在Collection_1
下为someArrayField输出每个文档下的元素总数(Collection_1
可以包含具有相似布局的多个文档)。
我知道,我需要以某种方式使用“Aggregation Pipeline”来获得理想的结果,但由于缺乏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"}
}
},
]
);
以上是关于MongoDB - 查询计算数组中的嵌套文档的主要内容,如果未能解决你的问题,请参考以下文章
将查询构建器条件转换为 MongoDB 操作,包括嵌套的子文档数组