我有一个真正的脑筋急转弯......对我来说很好。
我有一个集合,其中所有文档都具有相同的字段,但可能并非全部都包含每个文档的值。
例如:
doc1{
twitter: '*********',
facebook: '*********',
linkedin: '*********'
}
doc2{
twitter: '*********'
}
doc3{
facebook: '*********',
linkedin: '*********'
}
我的挑战是我想做一个“updateMany”函数,我可以在其中传递如下内容:
updateMany(){
twitter: '########',
facebook: '########',
linkedin: '########'
}
我只想更新文档中已经有值的字段,而不是更新所有字段,因此每个文档最终都有一个值。
所以它看起来像这样:
doc1{
twitter: '########',
facebook: '########',
linkedin: '########'
}
doc2{
twitter: '########'
}
doc3{
facebook: '########',
linkedin: '########'
}
我不确定如何在不迭代每个记录和每个字段的情况下执行此操作,这似乎过于复杂。
Mongoose 必须有适合这种情况的东西......???
谢谢!
最佳答案
您可以尝试使用 $exists运算符,但您无法将所有这些更新合并到一个数据库调用中,因为不同的文档将根据属性受到影响(这是因为您分别指定过滤条件和更新定义),但是您可以在 JS 中动态构建该查询:
let newDoc = {
twitter: '########',
facebook: '########',
linkedin: '########'
};
Object.keys(newDoc).forEach(async (key) => {
await Model.updateMany({ [key]: { $exists: true} }, { $set: { [key]: newDoc[key] } });
});
关于node.js - Mongoose 必须有一个解决方案,仅更新具有值的字段,即使您传递更多字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53095789/