我想在参与者的每个数据集对象中,从另一个集合文件中添加一个字段长度 数据集和文件之间的关系是一对一的。
参与者收藏集
[{
"_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"},
}
},
])
我无法回到原始结构,也不知道是否有可能。
感谢您的建议。