假设我有一个集合things
,其中包含以下文档:
[
{
"_id": 1,
"name": "one",
"others": [2, 3]
},
{
"_id": 2,
"name": "two"
},
{
"_id": 3,
"name": "three"
},
{
"_id": 4,
"name": "four"
}
]
如您所见,第一个文档通过其others
数组形成了一棵树,该数组包含作为第一个文档的子文档的其他文档的id。
我尝试编写一个查询,返回一个文档的平面列表,其中第一个文档是父文档,其余文档的id在第一个文档的others
数组中。我只需要直接子元素。对于本例,传递值1
的查询的结果数组将为
[
{
"_id": 1,
"name": "one",
"others": [2, 3]
},
{
"_id": 2,
"name": "two"
},
{
"_id": 3,
"name": "three"
}
]
看起来很简单,但我不确定语法。
我试过了
db.things.aggregate([{
$match: { _id: 1 }
}, {
$match: { _id: { $in: '$others'}}
}
])
这将失败,并显示消息$in needs an array
,当然,它确实失败了。要获取第一个元素是父元素、其他元素是第一级子元素的文档列表,正确的语法是什么?
2条答案
按热度按时间bnlyeluc1#
一种方法是执行自查找,然后
$unionWith
根记录(id:(一)Mongo Playground
pkmbmrz72#
当我将集合名称改为
things
并重新排序后,这个方法运行得很好。谢谢,@ray!下面是我的最后一个查询:结果: