如何查找mongodb中数组中的字段

如何查找mongodb中数组中的字段,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我要做的是,用文档替换id字段 { "id": "1", "label" : "alex", "children" : [ { "id" : "rJqS8aW-W" }, { "id" : "SkF8UaW-W" } ], } { "label" : "felix", "id" : "rJqS8aW-W", "children"

我要做的是,用文档替换id字段

{
    "id": "1",
    "label" : "alex",
    "children" : [
        {
            "id" : "rJqS8aW-W"
        },
        {
            "id" : "SkF8UaW-W"
        }
    ],
}
{
    "label" : "felix",
    "id" : "rJqS8aW-W",
    "children" : [
        {
            "id" : "S1gcBUT---"
        },
        {
            "id" : "r1ltUUpZbb"
        }
    ]
}
{
    "label" : "tom",
    "id" : "SkF8UaW-W",
    "children" : [
        {
            "id" : "S1gcBUT---"
        },
        {
            "id" : "r1ltUUpZbb"
        }
    ]
}
....
为了能够做到这一点,我写道

{
    "id": "1",
    "label" : "alex",
    "children" : [
        {
            "id" : "rJqS8aW-W"
        },
        {
            "id" : "SkF8UaW-W"
        }
    ],
    details: [
        {
            "label" : "felix",
            "id" : "rJqS8aW-W",
            "children" : [
                {
                    "id" : "S1gcBUT---"
                },
                {
                    "id" : "r1ltUUpZbb"
                }
            ]
        },
        {
            "label" : "tom",
            "id" : "SkF8UaW-W",
            "children" : [
                {
                    "id" : "S1gcBUT---"
                },
                {
                    "id" : "r1ltUUpZbb"
                }
            ]
        }

    ]
}
...
但它并没有像我预期的那样回来。我们不能对数组使用
$lookup
?我的意思是我想根据数组中的字段进行搜索

编辑:

一些修改,比如

db.collection.aggregate([
    {$lookup: {from: "collection" , localField: "children.id", foreignField: "id", as: "details"}}
])

也会抛出错误


我该怎么办
flat
ting
children
id字段,而不是
$lookup

如果您所要求的只是“替换”children,则在
as
的参数中使用
“children”
。我想得到children数组中包含的children的详细信息。对于alex,它包括两个孩子,felix和tom。但我看到的问题是,你正在“加入”与“对象图”中相同的集合
$lookup
不会递归地执行此操作,如果您希望递归,您应该解释其目的,因为对于您想要执行的操作,可能有更好的解决方案。我的目的不清楚吗?我想获得子数组中文档的详细信息。你想让它“递归地加载”所有子数组。是的,这是可以理解的。我刚刚告诉过你那是不可能的。你明白吗?与此同时,我问你“你为什么需要这个?”如果这只是一个看到它发生的练习,那么它就不会起作用。如果你真的解释了你打算用这个“层次结构图”做什么,那么我们也许可以为你指出一个解决方案。但是,
$lookup
并不能满足您的要求。
 db.collection.aggregate([
        {$lookup: {from: "collection" , localField: "$children.id", foreignField: "id", as: "details"}}
    ])
  db.collection.aggregate([
        {$lookup: {from: "collection" , localField: "children.$.id", foreignField: "id", as: "details"}}
    ])