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"},
}
},
])
我无法回到原来的结构,我不知道这是否可能
非常感谢您的建议。是否可以在文件中循环所有文档,然后使用个人更新来更新贡献者?这是可能的,但我想知道我是否可以只使用一个查询来完成。是否可以在文件中循环所有文档,然后使用个人更新来更新贡献者?这是可能的,但我想知道如果我只需要一个查询就可以了