【问题标题】:Swapping two fields around in mongodb在 mongodb 中交换两个字段
【发布时间】:2014-03-12 04:47:44
【问题描述】:

我不小心以错误的方式插入了电子邮件和姓名列

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

如何在每个ObjectId 的基础上解决此问题?

【问题讨论】:

  • “每个对象”是什么意思?您想要更新的只是一个文档、多个(已定义)还是全部?

标签: mongodb


【解决方案1】:
db.collection.update( { condition }, { $rename: { "email": "name" } } )

在此操作之前不要忘记将name 字段更改为name_tmp 之类的内容。然后将name_tmp重命名为email

文档here

【讨论】:

  • 谢谢,但只有一些记录是错误的。不是全部
  • 然后,写下你的条件
  • 感谢 Mustafa,我采用了上述方法,但事后看来,您的方法实际上看起来更容易
【解决方案2】:

看看这个问题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];

但这是未经测试的。

【讨论】:

  • 谢谢,我可以用 - db.User.find({name:/@/}).forEach(function (doc){ var email = doc.name; var name = doc.email; doc.email = 电子邮件; doc.name = 名称; db.User.save(doc); });
【解决方案3】:

谢谢它对我有用,但我不得不将选项“multi”设置为 true。

db.collection('collection').update({ condition }, { $rename: { "currentName": "newName" } }, { multi: true });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-07
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多