Mongodb 如何查找数组中包含一定数量嵌入/嵌套文档的文档
我想知道是否可以根据数组中嵌套文档的数量来选择文档 例如,我的查询是否可以选择任何文档的URL,该文档在Mongodb 如何查找数组中包含一定数量嵌入/嵌套文档的文档,mongodb,Mongodb,我想知道是否可以根据数组中嵌套文档的数量来选择文档 例如,我的查询是否可以选择任何文档的URL,该文档在部分中包含少于或等于2个嵌套文档,并且具有类型:段落?在下面的文档中,我希望返回第一个对象,而不是第二个 { "_id":ObjectId( "5e2aafb6143f79b18d27bf7a" ), "metadata":{ "language":"en-gb", "timestamp":1517225687000, "url":
部分中包含少于或等于2个嵌套文档,并且具有类型:段落?在下面的文档中,我希望返回第一个对象,而不是第二个
{
"_id":ObjectId( "5e2aafb6143f79b18d27bf7a" ),
"metadata":{
"language":"en-gb",
"timestamp":1517225687000,
"url": "foo.com"
},
"body":{
"sections":[
{
"href":"http://test.co.uk/test.png",
"type":"image"
},
{
"text":"Lorem ipsum dolor sit amet",
"type":"paragraph"
},
{
"text":"consectetur adipiscing elit",
"type":"paragraph"
}
]
}
}
{
"_id":ObjectId( "5e2aafd8143f79b18d27bf7b" ),
"metadata":{
"language":"en-gb",
"timestamp":1517225687000,
"url": "bar.com"
},
"body":{
"sections":[
{
"href":"http://test.co.uk/test.png",
"type":"image"
},
{
"text":"Lorem ipsum dolor sit amet",
"type":"paragraph"
},
{
"text":"consectetur adipiscing elit",
"type":"paragraph"
},
{
"text":"Integer ut ligula diam",
"type":"paragraph"
}
]
}
我已经在MongoDB网站上阅读了教程中的查询文档部分,但不知道如何将类似的内容组合在一起。您可以通过混合使用$expr
、$lte
、$size
和$filter
,来达到预期的效果,通过使用此聚合,无需创建新字段:
db.your\u collection\u name.aggregate([
{
“$match”:{
“$expr”:{
“$lte”:[
{
//获取已筛选数组的大小
“$size”:{
//段落类型的过滤部分
“$filter”:{
“输入”:“$body.sections”,
“作为”:“部分”,
“条件”:{
“$eq”:[“$$section.type”,“段落”]
}
}
}
},
2.
]
}
}
}
])
结果如下所示:
您可以通过混合使用$expr
,$lte
,$size
&$filter
,通过使用此聚合,而无需创建新字段,来实现您期望的结果:
db.your\u collection\u name.aggregate([
{
“$match”:{
“$expr”:{
“$lte”:[
{
//获取已筛选数组的大小
“$size”:{
//段落类型的过滤部分
“$filter”:{
“输入”:“$body.sections”,
“作为”:“部分”,
“条件”:{
“$eq”:[“$$section.type”,“段落”]
}
}
}
},
2.
]
}
}
}
])
结果如下所示:
您可以使用检查数组是否有n
或更多元素。并且,您可以使用以下合适的语法投影所需字段:。谢谢@prasad\我来试试。您可以使用检查数组是否有n
或更多元素。而且,您可以使用以下合适的语法投影所需字段:。谢谢@prasad_389;,我来试试。
[
{
"_id": "5e2aafb6143f79b18d27bf7a",
"body": {
"sections": [
{
"href": "http://test.co.uk/test.png",
"type": "image"
},
{
"text": "Lorem ipsum dolor sit amet",
"type": "paragraph"
},
{
"text": "consectetur adipiscing elit",
"type": "paragraph"
}
]
},
"metadata": {
"language": "en-gb",
"timestamp": 1.517225687e+12,
"url": "foo.com"
}
}
]