Node.js Mongoose必须有一个只更新具有值的字段的解决方案,即使您传递了更多字段
我有一个真正的脑筋急转弯。。。对我来说很好 我有一个集合,其中所有文档都有相同的字段,但不一定都包含每个字段的值 例如:Node.js Mongoose必须有一个只更新具有值的字段的解决方案,即使您传递了更多字段,node.js,mongodb,express,mongoose,Node.js,Mongodb,Express,Mongoose,我有一个真正的脑筋急转弯。。。对我来说很好 我有一个集合,其中所有文档都有相同的字段,但不一定都包含每个字段的值 例如: doc1{ twitter: '*********', facebook: '*********', linkedin: '*********' } doc2{ twitter: '*********' } doc3{ facebook: '*********', linkedin: '*********' } 我的挑战是
doc1{
twitter: '*********',
facebook: '*********',
linkedin: '*********'
}
doc2{
twitter: '*********'
}
doc3{
facebook: '*********',
linkedin: '*********'
}
我的挑战是,我想做一个“updateMany”函数,在这个函数中,我可以传递如下内容:
updateMany(){
twitter: '########',
facebook: '########',
linkedin: '########'
}
doc1{
twitter: '########',
facebook: '########',
linkedin: '########'
}
doc2{
twitter: '########'
}
doc3{
facebook: '########',
linkedin: '########'
}
我只想更新文档中已经有值的字段,而不是更新所有字段,这样每个文档的每个字段都有值
所以看起来是这样的:
updateMany(){
twitter: '########',
facebook: '########',
linkedin: '########'
}
doc1{
twitter: '########',
facebook: '########',
linkedin: '########'
}
doc2{
twitter: '########'
}
doc3{
facebook: '########',
linkedin: '########'
}
我不知道如何在不遍历每条记录和每个字段的情况下做到这一点,这似乎过于复杂了
猫鼬一定有适合这种情况的东西
谢谢 您可以尝试使用operator,但不能将所有这些更新合并到一个数据库调用中,因为不同的文档会受到属性的影响(这是因为您分别指定了筛选条件和更新定义),但是您可以在JS中动态生成该查询:
let newDoc = {
twitter: '########',
facebook: '########',
linkedin: '########'
};
Object.keys(newDoc).forEach(async (key) => {
await Model.updateMany({ [key]: { $exists: true} }, { $set: { [key]: newDoc[key] } });
});