Почему это обновление MongoDB не работает? - PullRequest
4 голосов
/ 21 апреля 2011
db.posts.update({}, {"pop_score":999});

db.posts.find({},{"pop_score":1});
{ "_id" : ObjectId("4d8eadd6df83500f3b000004"), "pop_score" : 0 }
{ "_id" : ObjectId("4d8eb1e3df83500f3b000035"), "pop_score" : 1 }
{ "_id" : ObjectId("4d8eb238df83500f3b000039"), "pop_score" : 1 }
{ "_id" : ObjectId("4d91377bdf8350063d000000"), "pop_score" : 1 }
{ "_id" : ObjectId("4d913c19df8350063d000001"), "pop_score" : 2 }
{ "_id" : ObjectId("4d8eacabdf83500f3b000000"), "pop_score" : 1 }

Я обновляю pop_score до 999 для всех сообщений. Но когда я запрашиваю их, он не обновляется.

Ответы [ 2 ]

11 голосов
/ 21 апреля 2011

Это сработало, но обновляет только ПЕРВЫЙ соответствующий документ по умолчанию.Я подозреваю, что у вас есть НЕКОТОРЫЙ документ, который сейчас составляет 999.

Вам нужно указать MongoDB обновить каждый соответствующий документ, установив для необязательного флага multi значение true.:

db.posts.update({}, {"pop_score":999}, false, true)

Это обновит каждый документ, а не только первый найденный.

Вы также можете просмотреть документы по обновлению , которые имеют больше информациина этих флагах.

2 голосов
/ 22 апреля 2011

Остерегайтесь того, что update () заменяет найденный элемент на тот, который передается в качестве аргумента, вы должны использовать атомарный оператор $set для обновления значения поля (и, конечно, Брендан прав насчет первогопротив нескольких матчей):

db.posts.update({}, { $set: { pop_score: 999 } }, false, true)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...