首页 文章

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

提问于
浏览
2

我正在尝试运行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

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

    你必须迭代文件 .

    注意's a trick in case you don' t介意删除 old 字段:使用renameold 重命名为 new .

    NB2对于一些SQLike-fu动作(不是这个),aggregation framework可能很有用 .

  • 1

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

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

相关问题