【发布时间】:2017-07-09 21:09:35
【问题描述】:
我喜欢 Mongo 做一些简单的事情,所以我希望用它做一些更高级的事情。在我需要这个之前效果很好:
UPDATE tbl SET a = b WHERE c <> 0
a = b 部分是我无法弄清楚的。我试过 mongodb.org,但在那里找不到。我也找了WHERE a = b,但我也找不到。
另一种方法是获取所有行,而不是单独更新它们,但我不喜欢这样。它必须更简单。
谢谢。
【问题讨论】:
我喜欢 Mongo 做一些简单的事情,所以我希望用它做一些更高级的事情。在我需要这个之前效果很好:
UPDATE tbl SET a = b WHERE c <> 0
a = b 部分是我无法弄清楚的。我试过 mongodb.org,但在那里找不到。我也找了WHERE a = b,但我也找不到。
另一种方法是获取所有行,而不是单独更新它们,但我不喜欢这样。它必须更简单。
谢谢。
【问题讨论】:
您想查看更新文档。
http://www.mongodb.org/display/DOCS/Updating
您的代码可能如下所示:db.tbl.update( { c:{$ne:0}}, { $set: { a : b } } );
如果您需要复习高级查询(例如使用$ne),请查看此处:
http://www.mongodb.org/display/DOCS/Advanced+Queries
编辑:
显然您无法使用同一文档中的数据进行更新。
MongoDB: Updating documents using data from the same document
EDIT 2(使用 map reduce 的解决方案):
var c = new Mongo();
var db = c.getDB('db')
var s = db.getCollection('s')
s.drop();
s.save({z:1,q:5});
s.save({z:11,q:55});
db.runCommand({
mapreduce:'s',
map:function(){
var i = this._id; //we will emit with a unique key. _id in this case
this._id=undefined; //strange things happen with merge if you leave the id in
//update your document with access to all fields!
this.z=this.q;
emit(i,this);
},
query:{z:1}, //apply to only certain documents
out:{merge:'s'} //results get merged (overwrite themselves in collection)
});
//now take a look
s.find();
【讨论】:
$ne 不是问题所在。 a = b 是。您将值b 分配给a 列。我想将b 列的值分配给a 列。不是SET a = 'b',而是SET a = b
update 无法引用当前文档。我认为可以使用 map-reduce 来完成。正在研究发布的解决方案...