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

时间:2019-07-22 15:36:51

标签: mongodb

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

参与者收藏集


[{
    "_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"},

        }
    },
])

我无法回到原始结构,也不知道是否有可能。

感谢您的建议。

0 个答案:

没有答案