javascript - 将嵌套文档集合转换为具有父引用的模型树结构

标签 javascript mongodb meteor minimongo

我需要将具有嵌套文档的集合转换为具有父引用的模型树结构。这就是我的结构:

{
    "_id" : "sdaGREsfRdfGdFdwG",
    "docTitle" : "Document 1",
    "group" : [
        {
            "id" : "cdPhkTpMXi8z6TqMT"
            "title" : "title 1",
            "data" : [
                {
                    "id" : "Nkspf5kKfPo3axeJA",
                    "some" : "data",
                    "other" : "things",
                    "and" : "so on",    
                },
                {
                    "id" : "Ca8ncFgq83RoeD8he",
                    "some" : "data",
                    "other" : "things",
                    "and" : "so on",    
                },
                {
                    "id" : "vyjgkuNXRN9KkCd5o",
                    "some" : "data",
                    "other" : "things",
                    "and" : "so on",    
                }
            ],

        },
        {
            "id" : "TuibXPe5qMvqdMW6q"
            "title" : "title 2",
            "data" : [
                {
                    "id" : "f5L5zsSNRSQKWoAXL",
                    "some" : "data",
                    "other" : "things",
                    "and" : "so on",    
                }
            ],

        }
    ]
}

正如你所看到的,有一个组数组,其中还有一个数据数组。现在我需要一个像这样的主文档:

{
    "_id" : "sdaGREsfRdfGdFdwG",
    "docTitle" : "Document 1"
}

接下来的子元素是:

{
    "id" : "cdPhkTpMXi8z6TqMT"
    "title" : "title 1",
    "type" : "group",
    "parent" : "sdaGREsfRdfGdFdwG"
},
{
    "id" : "TuibXPe5qMvqdMW6q"
    "title" : "title 2",
    "type" : "group",
    "parent" : "sdaGREsfRdfGdFdwG"
}

至少是数据元素,它们是组元素的子元素:

{
    "id" : "Nkspf5kKfPo3axeJA",
    "some" : "data",
    "other" : "things",
    "and" : "so on",
    "type" : "element",
    "parent" : "cdPhkTpMXi8z6TqMT"
},
{
    "id" : "Ca8ncFgq83RoeD8he",
    "some" : "data",
    "other" : "things",
    "and" : "so on",
    "type" : "element",
    "parent" : "cdPhkTpMXi8z6TqMT"  
},
{
    "id" : "vyjgkuNXRN9KkCd5o",
    "some" : "data",
    "other" : "things",
    "and" : "so on",
    "type" : "element",
    "parent" : "cdPhkTpMXi8z6TqMT"  
},
{
    "id" : "f5L5zsSNRSQKWoAXL",
    "some" : "data",
    "other" : "things",
    "and" : "so on",
    "type" : "element",
    "parent" : "TuibXPe5qMvqdMW6q"      
}

所以我的尝试是这样的:

Collection.find({}).forEach(function(doc) {     // get all documents
    var docID = doc._id;

    doc.group.forEach(function(group) {         // get all groups
        var parent = group.id;
        group.type = "group";
        group.parent = docID;

        group.data.forEach(function(element) {  // get all elements
            element.type ="element";
            element.parent = parent;
        });
    });
});

1)我不知道如何以更好的方式做到这一点

2)我不知道如何将结果保存回集合中

最佳答案

分组:

db.myCol.aggregate([{$unwind:"$group"}, 
    {$project:{_id:"$group.id", some:"$group.some", 
               parent:"$_id", type:{$literal:"group"}}}])

对于元素:

db.myCol.aggregate([{$unwind:"$group"}, 
                    {$unwind:"$group.data"}, 
                    {$project:{_id:"$group.data.id", some:"$group.data.some", 
                               parent:"$group.id", type:{$literal:"element"}}}])

关于第二个问题:您可以在最后向聚合管道添加 $out 步骤。例如:{$out:"outputCol"}

关于javascript - 将嵌套文档集合转换为具有父引用的模型树结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34711116/

相关文章:

javascript - 清除空输入上的数据 - React.js

javascript - Twitter 帖子中出现的页面 URL - Javascript

mongodb - 如何检索具有匹配属性的对象数组的 mongo 文档

mongodb - 如何将 mongodb 集合中的数据加载到 pandas 的 DataFrame 中?

javascript - 如何使用 ReactiveVar 在 Meteor 中的模板之间传递数据

mongodb - Meteor 可以通过 SSL 连接到 MongoDB 吗?

javascript - 从 Meteor 中的导入文件夹渲染模板

javascript - 在 html() 之前将加载文本添加到 javascript

javascript - 我将如何用图像填充矩形?

python - 如何在 Python Eve 中禁用自动生成的字段?