Учитывая данные ниже, я хочу удалить все поддокументы в "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"}
]
}
Для обновления нескольких документов вы должны установить флаги обновления в Multi
:
MyMongoCollection.Update(query, update, UpdateFlags.Multi);
Это приведет к удалению субдокументов из всех документов.
Из документации MongoDB:
По умолчанию метод update() обновляет один документ, соответствующий его критериям выбора. Вызовите метод с параметром multi, установленным в true, чтобы обновить несколько документов.