首页 > 解决方案 > 如何在 MongoDB C# 中检索更新文档的所有 _id?

问题描述

我想使用 bulkWrite() 运行多个 upsert 查询。但问题是,bulkWrite 只返回插入的_ids 而不是更新的_ids。如何获取此查询中的所有 _id?

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);

标签: c#mongodbmongodb-query

解决方案


使用BulkWriteAsync,我不认为这是可以做到的。MongoDB操作的文档bulkWrite说明如下:

回报:

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

每个写操作的计数。

一个数组,其中包含每个成功插入或更新插入的文档的 _id。

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

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

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


推荐阅读