Я просто хотел добавить другое решение, которое работает для меня и довольно просто. Здесь это просто массив тегов (строк), поэтому чтобы обновить тег с именем «test» до «change», просто сделайте это:

я есть документ Mongo, который содержит массив элементов.

Я хотел бы сбросить.handled атрибут всех объектов в массиве, где.profile = XX

Документ находится в следующей форме:

{
    "_id": ObjectId("4d2d8deff4e6c1d71fc29a07"),
    "user_id": "714638ba-2e08-2168-2b99-00002f3d43c0",
    "events": [{
            "handled": 1,
            "profile": 10,
            "data": "....."
        } {
            "handled": 1,
            "profile": 10,
            "data": "....."
        } {
            "handled": 1,
            "profile": 20,
            "data": "....."
        }
        ...
    ]
}

Итак, я попробовал следующее:

.update({"events.profile":10},{$set:{"events.$.handled":0}},false,true)

Однако он обновляет толькопервый соответствующий элемент массива в каждом документе. (Это определенное поведение для$ - позиционный оператор.)

Как я могу обновитьвсе соответствующие элементы массива?

 Jaap08 дек. 2017 г., 15:48
Обновление подмножества или всех элементов массива было добавлено в mongodb 3.6:docs.mongodb.com/manual/reference/operator/update/...
 Jaap08 дек. 2017 г., 21:48
Обязательно ознакомьтесь с arrayFilters и подумайте, какой запрос использовать, чтобы сделать обновление эффективным. Проверьте ответ Нила Ланна:stackoverflow.com/a/46054172/337401

Ответы на вопрос(1)

Решение Вопроса

ления всех элементов в массиве. Смотри JIRAhttp://jira.mongodb.org/browse/SERVER-1243

В качестве обходного пути вы можете:

Обновлять каждый элемент отдельно (events.0.handled events.1.handled ...) или ...Прочитайте документ, внесите изменения вручную и сохраните его, заменив старый (проверьте«Обновить, если текущий» если вы хотите обеспечить атомарные обновления)
 LiorH12 янв. 2011 г., 17:08
если у вас есть похожая проблема, проголосуйте за эту проблему -jira.mongodb.org/browse/SERVER-1243
 adam15 дек. 2011 г., 20:50
Мне действительно нравится читать документ и сохранить подход. Но я использовал Couch до Mongo, поэтому такой подход кажется более естественным, поскольку для Couch не существует API запросов, а просто REST API для целых документов.

Ваш ответ на вопрос