Как получить все _ids обновленных документов в MongoDB C #? - PullRequest
0 голосов
/ 26 октября 2018

Я хочу запустить несколько запросов upsert, используя bulkWrite (). Но проблема в том, что bulkWrite возвращает только вставленные _ids, а не обновленные _ids. Как я могу получить все _ids в этом запросе?

var insertCommand = Builders<myObject>.Update.SetOnInsert(d => d.Name, object.Name).SetOnInsert(d => d.Age, object.Age);
var updateCommand = Builders<myObject>.Update.Set(d => d.LastRequest, object.DateTime);
var updateQueries = Builders<myObject>.Update.Combine(new[] { updateCommand, insertCommand });
var filter = Builders<myObject>.Filter;
var findQuery = filter.And(filter.Eq(e => e.Name, object.Name), filter.Eq(e => e.City, object.City));
var upsertObject = new UpdateOneModel<myObject>(findQuery, updateQueries) { IsUpsert = true };
bulkOps.Add(upsertObject);
var result = await Collection.BulkWriteAsync(bulkOps);

1 Ответ

0 голосов
/ 27 октября 2018

Используя BulkWriteAsync, я не думаю, что это можно сделать.Документация для операции MongoDB bulkWrite гласит следующее:

Возвращает:

Логическое значение, подтвержденное как true, если операция выполнялась с проблемой записи или falseесли запись была отключена.

Количество для каждой операции записи.

Массив, содержащий _id для каждого успешно вставленного или вставленного документа.

Что работает,однако для одного экземпляра это так:

var result = collection.FindOneAndUpdate(findQuery, updateQueries, new FindOneAndUpdateOptions<myObject> { IsUpsert = true, ReturnDocument = ReturnDocument.After});

После выполнения этого result будет содержать измененный документ, включая его _id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...