mongodb更新字段a为字段b的值

时间:2016-03-10 15:49:47

标签: mongodb mongodb-query

我正在尝试运行mongo查询以使用另一个字段的值更新一个字段的值。我有以下文件:

{ "_id" : ObjectId("56e0a3a2d59feaa43fba49d5"), "old" : 16, "new" : 17 }

{ "_id" : ObjectId("56e0a3a2d59feaa43fba49d3"), "old" : 11, "new" : 12 }

我想在更新后看起来像这样:

{ "_id" : ObjectId("56e0a3a2d59feaa43fba49d5"), "old" : 16, "new" : 16 }

{ "_id" : ObjectId("56e0a3a2d59feaa43fba49d3"), "old" : 11, "new" : 11 }

我试过以下但没有运气

db.runCommand(
{
 findAndModify: "testData",
 query: { $where: "this.new != this.old" },
 update: { old : this.new },
 upsert: true
}
)

db.testData.update( { $where: "this.new != this.old" }, { $set: { old: this.new } } );

mongoDb甚至可以实现这一点吗?

我想在一个查询中执行此操作,而不是遍历每个文档。

非常感谢任何想法。

谢谢

2 个答案:

答案 0 :(得分:1)

你还不能在MongoDB中做到这一点(请注意未来的访问者:我指的是V3.2)。

你必须迭代文件。

请注意,如果您不介意删除old字段,请注意:使用renameold重命名为new

对于某些SQLike-fu操作(不是这个),NB aggregation framework可能很有用。

答案 1 :(得分:0)

您可以尝试这样的操作,并在您想要更新其他文档时更改_id

db.testData.find().forEach(function(elem) {
  db.testData.update({
    "_id": "56e0a3a2d59feaa43fba49d5"
  }, {
    $set: {
      new: elem.old
    }
  });
});