如何在MongoDB C#中检索更新文档的所有_id?

时间:2018-10-26 20:49:05

标签: c# mongodb mongodb-query

我想使用bulkWrite()运行多个upsert查询。但是问题是,bulkWrite仅返回插入的_id,而不返回更新的_id。我怎么能得到所有 _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 :(得分:0)

我认为无法使用BulkWriteAsync。 MongoDB bulkWrite操作上的documentation指出:

  

返回:

     

如果操作运行时布尔值被确认为true   写关注;如果禁用写关注,则为false。

     

每个写入操作的计数。

     

每个成功包含一个_id的数组   插入或插入的文档。

但是,对于单个实例有效的是:

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

运行此命令后,result将保存修改后的文档,包括其_id