2011-11-22 89 views
2

我喜欢Mongo的简单的东西,所以我希望能用它来做更先进的事情。直到我需要这一点,工作细:如何在Mongo中“(WHERE)column = column”?

UPDATE tbl SET a = b WHERE c <> 0 

a = b的部分是什么,我想不通。我尝试了mongodb.org,但是我在那里找不到它。我也寻找WHERE a = b,但我无法找到。

另一种方法是获取所有行并单独更新它们,但我不喜欢那样。它必须更简单。

谢谢。

回答

2

您想检查文档以进行更新。
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(溶液与地图减少)

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(); 
+0

的'$ ne'是没问题的。 'a = b'是。您将值“b”分配给列“a”。我想将列“b”的值赋给列“a”。不是'SET a ='b'',而是'SET a = b' – Rudie

+0

我编辑了我的答案。显然'update'不能引用当前文档。我认为可以用map-reduce来完成。致力于解决方案发布... – z5h

+0

@Rudie:使用地图/缩小解决方案再次更新。 – z5h