我想使用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);
答案 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
。