Как «(ГДЕ) column = column» в Монго? - PullRequest
2 голосов
/ 22 ноября 2011

Мне нравится Mongo для простых вещей, поэтому я надеялся использовать его для чего-то более продвинутого. И это работало нормально, пока я не нуждался в этом:

UPDATE tbl SET a = b WHERE c <> 0

Часть a = b - это то, что я не могу понять. Я пробовал mongodb.org, но не могу найти его там. Я также искал WHERE a = b, но я тоже не могу его найти.

Альтернативой является выборка всех строк и их обновление по отдельности, но мне это не нравится. Это должно быть проще.

Спасибо.

1 Ответ

3 голосов
/ 22 ноября 2011

Вы хотите проверить документацию для обновления.
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: Обновление документов с использованием данных из того же документа

РЕДАКТИРОВАТЬ 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...