我有一个真正的脑筋急转弯...对我来说很好。
我有一个集合,其中所有文档都具有相同的字段,但可能并非每个文档都包含值。
例如:
doc1{
twitter: '*********',
facebook: '*********',
linkedin: '*********'
}
doc2{
twitter: '*********'
}
doc3{
facebook: '*********',
linkedin: '*********'
}
我的挑战是我想做一个'updateMany'函数,我可能要传递这样的内容:
updateMany(){
twitter: '########',
facebook: '########',
linkedin: '########'
}
并且我只想更新文档中已经具有值的字段,而不更新所有字段,因此每个文档最终每个字段都有一个值。
所以它看起来像这样:
doc1{
twitter: '########',
facebook: '########',
linkedin: '########'
}
doc2{
twitter: '########'
}
doc3{
facebook: '########',
linkedin: '########'
}
我不确定在不遍历每个记录和每个字段的情况下如何执行此操作,这似乎过于复杂。
在这种情况下猫鼬必须有东西... ???
谢谢!
答案 0 :(得分:1)
您可以尝试使用$exists运算符,但不能将所有这些更新合并到一个数据库调用中,因为不同的文档会根据属性而受到影响(这是因为您分别指定了过滤条件和更新定义),但是您可以在JS中动态构建该查询:
let newDoc = {
twitter: '########',
facebook: '########',
linkedin: '########'
};
Object.keys(newDoc).forEach(async (key) => {
await Model.updateMany({ [key]: { $exists: true} }, { $set: { [key]: newDoc[key] } });
});