【问题标题】:How to retrieve all _ids of updated documents in MongoDB C#?如何在 MongoDB C# 中检索更新文档的所有 _id?
【发布时间】:2018-10-26 20:49:05
【问题描述】:

我想使用 bulkWrite() 运行多个 upsert 查询。但问题是,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);

【问题讨论】:

  • 您是否从 bulkWrite 响应中获得了修改文档的 ID?

标签: c# mongodb mongodb-query


【解决方案1】:

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

返回:

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

每次写入操作的计数。

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

然而,对单个实例有效的是:

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

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

【讨论】:

  • 感谢您的回答。我知道我可以使用FindOneAndUpdate,但我不能将它用作批量操作。我需要批量处理。
  • 恐怕在这种情况下您只有一个选择,您需要预先检索所有与您的查找条件匹配的_ids,然后执行您的操作一直在做。
猜你喜欢
  • 1970-01-01
  • 2011-04-30
  • 2015-09-26
  • 1970-01-01
  • 2015-10-01
  • 2014-06-01
相关资源
最近更新 更多