Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb-如何将字段从一对一关系添加到嵌套对象_Mongodb - Fatal编程技术网

Mongodb-如何将字段从一对一关系添加到嵌套对象

Mongodb-如何将字段从一对一关系添加到嵌套对象,mongodb,Mongodb,我想在另一个集合文件的贡献者的对象的每个数据集中添加一个字段长度 数据集和文件之间的关系是一对一的 贡献者集合 [{ "_id": "123456", "data_sources": [{ "id": "a0d20c86-a178-4bdc-8448-ec8ea1748e04", "name": "contributor1", "data_sets": [{ "created

我想在另一个集合文件的贡献者的对象的每个数据集中添加一个字段长度 数据集和文件之间的关系是一对一的

贡献者集合


[{
    "_id": "123456",
    "data_sources": [{
            "id": "a0d20c86-a178-4bdc-8448-ec8ea1748e04",
            "name": "contributor1",
            "data_sets": [{
                "created_at": "2019-06-18T09:20:30.791798+00:00",
                "id": ObjectId("5d08acde2b33b0f9082ff7d2")
            }]
        },
        {
            "name": "contributor2",
            "id": "3928e378-a400-44e9-a88c-62b544c970cd",
            "data_sets": [{
                    "created_at": "2019-06-18T09:20:35.071041+00:00",
                    "id": ObjectId("5d08ace2ac1be4eeab4be6da")
                },
                {
                    "created_at": "2019-06-18T09:46:56.623600+00:00",
                    "id": ObjectId("5d08b31059ccc2e56d4be6da")
                }
            ]
        }
    ]
}]
文件收集

[
    {
    "_id" : ObjectId("5d08acde2b33b0f9082ff7d2"),
    "length" : 765,
},
{
    "_id" : ObjectId("5d08ace2ac1be4eeab4be6da"),
    "length" : 6952,
},
{
    "_id" : ObjectId("5d08b31059ccc2e56d4be6da"),
    "length" : 145,
}
]

预期结果

[{
    "_id": "123456",
    "data_sources": [{
            "id": "a0d20c86-a178-4bdc-8448-ec8ea1748e04",
            "name": "contributor1",
            "data_sets": [{
                "created_at": "2019-06-18T09:20:30.791798+00:00",
                "id": ObjectId("5d08acde2b33b0f9082ff7d2"),
                "length": 765
            }]
        },
        {
            "name": "contributor2",
            "id": "3928e378-a400-44e9-a88c-62b544c970cd",
            "data_sets": [{
                    "created_at": "2019-06-18T09:20:35.071041+00:00",
                    "id": ObjectId("5d08ace2ac1be4eeab4be6da"),
                    "length": 6952
                },
                {
                    "created_at": "2019-06-18T09:46:56.623600+00:00",
                    "id": ObjectId("5d08b31059ccc2e56d4be6da"),
                    "length": 145
                }
            ]
        }
    ]
}
]
我试过的

db.getCollection('contributors').aggregate([
    {$unwind: '$data_sources'},
    {$unwind: '$data_sources.data_sets'},
    {
        $lookup: {
            from: "fs.files",
            localField: "data_sources.data_sets.id",
            foreignField: "_id",
            as: "files"
        }
    },
    {
        $addFields: {
            "data_sources.data_sets.size": {"$arrayElemAt":["$files.length",0]}
        }
    },
    {
        "$group": {
            "_id": "$_id",
           "data_sources": { $push: "$data_sources"},

        }
    },
])
我无法回到原来的结构,我不知道这是否可能


非常感谢您的建议。

是否可以在文件中循环所有文档,然后使用个人更新来更新贡献者?这是可能的,但我想知道我是否可以只使用一个查询来完成。是否可以在文件中循环所有文档,然后使用个人更新来更新贡献者?这是可能的,但我想知道如果我只需要一个查询就可以了