По умолчанию, команда обновления MongoDB будет обновлять только один документ.
db.collection.update({document to be found},{changes to be done})
Чтобы обновить несколько документов, вы должны включать в себя мульти ключевого слова.
db.collection.update({document to be found},{changes to be done},{multi:true})
Если предположить, что структура документа, как показано ниже:
{
"_id": 5,
"body": "Correct horse battery staple",
"comments": [{"user_id": "123"},{"user_id": "456"},{"user_id": "123"}]
}
{
"_id": 6,
"body": "Correct horse battery staple",
"comments": [{"user_id': "23"},{"user_id": "123"},{"user_id": "13"}]
}
В этом случае, я, возможно, потребуется обновить несколько элементов внутри массива, а также несколько документов. Для этого не требуется запрос mongodb по умолчанию. Вместо этого я прокручу документы и сделаю это следующим образом.
// loop until all documents has been updated
while(db.post.find({'comments.user_id':'123'}).count()!=0)
{
db.post.update(
{ 'comments.user_id':'123' },
{ $set:{'comments.$.user_id':'abc'} },
{ multi:true }
)
}
После запуска 1-го контура, коллекция пост будет выглядеть следующим образом:
{
"_id": 5,
"body": "Correct horse battery staple",
"comments": [{"user_id": "abc"},{"user_id": "456"},{"user_id": "123"}]
}
{
"_id": 6,
"body": "Correct horse battery staple",
"comments": [{"user_id": "23"},{"user_id": "abc"},{"user_id": "13"}]
}
После запуска 2-го контура, коллекция пост будет выглядеть следующим образом:
{
"_id": 5,
"body": "Correct horse battery staple",
"comments": [{"user_id": "abc"},{"user_id": "456"},{"user_id": "abc"}]
}
{
"_id": 6,
"body": "Correct horse battery staple",
"comments": [{"user_id": "23"},{"user_id": "abc"},{"user_id": "13"}]
}
В третьем запуске цикла цикл завершается.
возможно дубликат [Как обновить несколько элементов массива в MongoDB] (http://stackoverflow.com/questions/4669178/how-to-update-multiple-array-elements-in-mongodb) – JohnnyHK