在mongodb中交换两个字段

时间:2014-02-13 10:49:32

标签: mongodb

我不小心插入了电子邮件,并以错误的方式命名列

{ 
  "_id" : ObjectId("52e72d00d1c3f81199000002"), 
  "email" : "John", 
  "name" : "john@gmail.com"
}

如何根据ObjectId进行修复?

3 个答案:

答案 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 });