Удалить вложенный документ из массива

1

Учитывая данные ниже, я хочу удалить все поддокументы в "data" где "k" == "c". Что мой код:

var query = Query.EQ("templateId", "537c6648d7d6bd0a68a34918");
var update = Update.Pull("data", new BsonDocument() { { "k", "c" } });
MyMongoCollection.Update(query, update);

Итак, что происходит, так это то, что на 1 документ влияет, и обновление останавливается. Я проверил запрос и вернул все документы, как ожидалось. Просто с обновлением pull-break, он ломается.

Что может быть неправильным?

У WriteConcern нет ошибки. Только один запрос возвращает 3 документа, а WriteConcern имеет 1 документ.

{
    "_id" : ObjectId("537c85a2d7d6bd0a68a3491b"),
    "templateId" : "537c6648d7d6bd0a68a34918",
    "data" : [ 
        {"k" : "b", "v" : "111"}, 
        {"k" : "a", "v" : "222"}, 
        {"k" : "c", "v" : "333"}
    ]
},
{
    "_id" : ObjectId("537d6a41d7d6bd0608cb27a4"),
    "templateId" : "537c6648d7d6bd0a68a34918",
    "data" : [ 
        {"k" : "b", "v" : "111"}, 
        {"k" : "a", "v" : "222"}, 
        {"k" : "c", "v" : "333"}
    ]
}
Теги:
mongodb-.net-driver

1 ответ

1
Лучший ответ

Для обновления нескольких документов вы должны установить флаги обновления в Multi:

MyMongoCollection.Update(query, update, UpdateFlags.Multi);

Это приведет к удалению субдокументов из всех документов.

Из документации MongoDB:

По умолчанию метод update() обновляет один документ, соответствующий его критериям выбора. Вызовите метод с параметром multi, установленным в true, чтобы обновить несколько документов.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню