我有一个收藏点:
- spotId
- name
和代码:
- codeId
- spotId
- code
我要介绍的领域
- spotName
到代码(并通过 spotId 加入)。
如何在 mongo shell 中更新所有现有文档?
当我尝试 $lookup 时,我总是得到整个 Spot 文档,而不仅仅是名称字段。
最佳答案
如果你想获得一种在每个文档中都得到 spotName
的格式,你可以使用聚合管道。 $lookup
是一个好的开始。它在这里生成完整的数组,您可以$unwind
并投影必要的东西
[{$lookup: {
from: 'Spots',
localField: 'spotId',
foreignField: 'spotId',
as: 'new_field'
}},
{$unwind: '$new_field'},
{$project: {
codeId: 1,
spotId: 1,
code: 1,
spotName: '$new_field.name'
}}
]
上面的解决方案代表了您只需要使用结果的情况。
如果您确实想对集合执行更新
,唯一的方法是编写一个find
,它遍历代码中的所有文档,然后一旦它得到文档,它使用 findOne
在 Spots 中搜索文档,然后发出更新语句。
Codes.find().each(function(err, doc) {
Spots.findOne({spotId: doc.spotId}, function (err, item) {
Codes.update({codeId: doc.codeId}, {$set: {spotName: item.name}}, function (err, res) {})
})
});
关于MongoDB 外壳 : Join a single field from another collection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40179541/