如何遍历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

我在MongoDB中有一个具有以下结构的文档:

{
    "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" } } ])