我不小心插入了电子邮件,并以错误的方式命名列
{
"_id" : ObjectId("52e72d00d1c3f81199000002"),
"email" : "John",
"name" : "john@gmail.com"
}
如何根据ObjectId
进行修复?
答案 0 :(得分:4)
db.collection.update( { condition }, { $rename: { "email": "name" } } )
在此操作之前,请勿忘记将name
字段更改为name_tmp
。然后将name_tmp
重命名为email
文档here
答案 1 :(得分:1)
看一下这个问题how can i update field with another field's value。
在单个更新查询中很难做到,但您可以使用javascript forEach
循环:
db.item.find(conditions...).forEach( function (doc) {
var email = doc.name;
var name = doc.email
doc.email = email;
doc.name = name
db.item.save(doc);
});
你可以在这样的单行中看这样做;
doc.email = [doc.name, doc.name = doc.email][0];
但这是未经测试的。
答案 2 :(得分:0)
谢谢它适合我,但我必须将选项'multi'设置为true。
db.collection('collection').update({ condition }, { $rename: { "currentName": "newName" } }, { multi: true });