【发布时间】:2021-07-30 16:03:20
【问题描述】:
说明
MongoDB 的 updateMany 方法在某些字段上与 $rename 一起使用时不会更新任何文档。
示例
我尝试重命名字段blog.blog_ttile 和blog.blog_cotnet。我检查了拼写错误,没有。
Example model:
User: {
name,
email,
blog: {
blog_ttile,
blog_cotnet
}
}
代码:
const mongoose = require('mongoose');
const User = mongoose.model('User');
const nameChanges = {
"blog.blog_ttile": 'blog.title',
'blog.blog_cotnet': 'blog.content',
};
async function performNameChanges() {
try {
const updatedDocuments = await User.updateMany({}, { $rename: nameChanges });
console.log({ updatedDocuments });
} catch(err) {
console.error(err);
}
}
返回:
{ updatedDocuments: { ok: 0, n: 0, nModified: 0 } }
其他详情
某些字段被正确识别。假设在上面的例子中email。但是,当我尝试更新更新的名称时,它不再起作用。有趣的是,它仍然检测到原始名称。
例子:
将email 重命名为personal_email 有效。之后将personal_email 重命名为email 不会并返回{ ok: 0, n: 0, nModified: 0 }。再次对 email 调用重命名会返回 { n: <total_records>, nModified: 0, ok: 1 },尽管没有文档具有 email。
这可能是什么原因造成的?
注意:
这个问题适用于没有 Mongoose 的 MongoDB,使用 db.getCollection("User").updateMany 而不是 User.updateMany
【问题讨论】: