如何遍历MongoDB中的嵌套文档并返回子树?
我在MongoDB中有一个具有以下结构的文档:如何遍历MongoDB中的嵌套文档并返回子树?,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我在MongoDB中有一个具有以下结构的文档: { "k1": { "k11": {<extended-sub-document-11>}, "k12": {<extended-sub-document-12>} }, "k2": { "k21": {<extended-sub-document-21>} } } { “k1”:{ “k11”:{}, “k12”:{} }, “k
{
"k1": {
"k11": {<extended-sub-document-11>},
"k12": {<extended-sub-document-12>}
},
"k2": {
"k21": {<extended-sub-document-21>}
}
}
{
“k1”:{
“k11”:{},
“k12”:{}
},
“k2”:{
“k21”:{}
}
}
如何在k12
获取整个对象?find
机制要求我提供一个要匹配的值。但是在这里,我只想遍历路径k1/k12
,并在该键处检索整个子文档
提前感谢。使用in.find()
您可以按如下方式进行尝试:
db.collection.find({}, { "k1.k12": 1})
测试:
注意:您只能获得k12
的值/对象,但由于它嵌套在k1
中,在输出中,您将看到与k1
中的k12
对象相同的结构,如:{k1:{k12:{…}}
使用聚合的阶段:
测试:
通过使用聚合
$project
,它比.find()
中的投影功能强大得多,您可以将字段的值分配给字段。在上面的查询中,我们使用$
(这有助于获取引用字段的值)将k1.k12
处的值赋值给一个字段k12
。您是否尝试过:db.collection.find({},{“k1.k12”:1})
或db.collection.aggregate([{$project:{k12:$k1.k12}]))
这也会返回k12
的祖先键,但如果这是唯一的方法,我可以解决它。谢谢你的建议。你说的祖先钥匙是什么意思?是k1
?那你试过聚合查询了吗?太好了。聚合正是我所需要的。如果你把你的评论作为回答,我会接受的。
db.collection.aggregate([ { $project: {_id :0, k12: "$k1.k12" } } ])