我有一个收藏点:
- spotId
- name
Run Code Online (Sandbox Code Playgroud)
和代码:
- codeId
- spotId
- code
Run Code Online (Sandbox Code Playgroud)
我要介绍领域
- spotName
Run Code Online (Sandbox Code Playgroud)
到代码(并通过 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'
}}
]
Run Code Online (Sandbox Code Playgroud)
如果您只需要使用结果,则上面的解决方案代表了这种情况。
如果您确实想对update集合执行 an ,唯一的方法是编写一个find遍历 Codes 中所有文档的a ,然后一旦它获取该文档,它就会使用 搜索 Spots 中的文档findOne,然后发出更新语句。
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) {})
})
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1633 次 |
| 最近记录: |