我正在尝试运行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甚至可以实现这一点吗?
我想在一个查询中执行此操作,而不是遍历每个文档。
非常感谢任何想法。
谢谢
答案 0 :(得分:1)
你还不能在MongoDB中做到这一点(请注意未来的访问者:我指的是V3.2)。
你必须迭代文件。
请注意,如果您不介意删除old
字段,请注意:使用rename将old
重命名为new
。
对于某些SQLike-fu操作(不是这个),NB aggregation framework可能很有用。
答案 1 :(得分:0)
您可以尝试这样的操作,并在您想要更新其他文档时更改_id
:
db.testData.find().forEach(function(elem) {
db.testData.update({
"_id": "56e0a3a2d59feaa43fba49d5"
}, {
$set: {
new: elem.old
}
});
});