Not*_*ple 9 c# mongodb mongodb-.net-driver
我有一个我想要插入的文档.它有一个属性的唯一索引,所以我有这样的东西,以确保我没有碰撞
var barVal = 1;
collection.UpdateOne(
x=>x.Bar == barVal,
new UpdateDefinitionBuilder<Foo>().Set(x=>x.Bar, barVal),
new UpdateOptions { IsUpsert = true });
Run Code Online (Sandbox Code Playgroud)
但我似乎有时会在条形图上的唯一索引上发生碰撞.
围绕upserts是mongo原子,所以如果过滤器匹配文档,则在更新完成之前无法更改?
如果它是我可能在其他地方有问题,如果它不是我需要处理事实不是.
文档似乎并没有暗示这是另一种方式.
https://docs.mongodb.com/v3.2/reference/method/Bulk.find.upsert/ https://docs.mongodb.com/v3.2/reference/method/db.collection.update/
实际上,文档对此有所说明。这是我在db.collection.update#use-unique-indexes中找到的内容
为了避免多次插入同一文档,请仅
upsert: true在查询字段具有唯一索引时使用。...
使用唯一索引,如果多个应用程序使用 发出相同的更新
upsert: true,则只有一个应用程序update()能够成功插入新文档。其余操作将:
更新新插入的文档,或者
当他们尝试插入重复项时失败。如果操作由于重复索引键错误而失败,应用程序可以重试该操作,该操作将作为更新操作成功。
因此,如果您在正在查询的字段上创建了唯一索引,则可以保证插入是“原子的”,并且在发生故障时会执行某种回滚。
| 归档时间: |
|
| 查看次数: |
697 次 |
| 最近记录: |