MongoDB查询-获取具有未定义树状结构的嵌套文档中特定字段的所有出现值

MongoDB查询-获取具有未定义树状结构的嵌套文档中特定字段的所有出现值,mongodb,Mongodb,我有一个递归的、树状的、未定义结构的mongoDB文档。我只知道有一些字段“ref”包含字符串。我想获取树嵌套文档中出现的所有“ref”的值。 例如: "properties":{ "title":{ "ref":"bannerTitle" }, "buttons":{ "items":{ "ref":"button" } } } 我希望: ["banner

我有一个递归的、树状的、未定义结构的mongoDB文档。我只知道有一些字段“ref”包含字符串。我想获取树嵌套文档中出现的所有“ref”的值。 例如:

   "properties":{
      "title":{
         "ref":"bannerTitle"
      },
      "buttons":{
         "items":{
            "ref":"button"
         }
      }
   }
我希望:

["bannerTitle", "button"]
这些“ref”字段可以在我的文档中的任何位置,并且文档没有深度限制


我是MongoDB的新手,但我在文档或研究中没有发现任何可以使用聚合来完成这项工作的东西。有办法吗?如果可能的话,我想创建一个视图。

使用MongoDB聚合是不可能的,因为它的语法非常有限

您可以执行js代码并将结果存储在集合中:

输入
输出
好吧,我就是这么想的,但很难确定。我会使用代码。谢谢
{
    "_id" : ObjectId("5e2f795cc23d78cc72e38f30"),
    "properties" : {
        "title" : {
            "ref" : "bannerTitle"
        },
        "buttons" : {
            "items" : {
                "ref" : "button"
            }
        }
    }
}

{
    "_id" : ObjectId("5e2f7b2ac23d78cc72e38f77"),
    "properties" : {
        "foo" : {
            "bar" : {
                "buz" : {
                    "ref" : "foobarbuz"
                }
            }
        },
        "title" : {
            "ref" : "bannerTitle"
        },
        "buttons" : {
            "items" : {
                "ref" : "button"
            }
        }
    }
}
db.getCollection('collection').find({}).forEach(function(doc){
    function _(obj, result){
        //Iterate
        for(var key in obj){
            //If key is ref, we insert inside result new value
            if(key == "ref"){
                result.push(obj[key]);
            // If value is object, we call recursive function
            } else if (typeof(obj[key]) == "object"){
                result = _(obj[key], result)
            }
        }
        return result;
    }

    print(_(doc, []));
})
[
    "bannerTitle",
    "button"
]

[
    "foobarbuz",
    "bannerTitle",
    "button"
]