查看mongodb文档我读到FindOneAndReplace将是一个ATOMIC操作。但我不明白为什么ReplaceOne不会是原子的?如果存在差异,为什么要使用ReplaceOne?
答案 0 :(得分:2)
我刚刚在这里找到答案,对于替换应该是相同的。
答案 1 :(得分:1)
文档提供了不同的方法签名:
ReplaceOneResult ReplaceOne(
FilterDefinition<TDocument> filter,
TDocument replacement,
ReplaceOptions options = null,
CancellationToken cancellationToken = null
)
TProjection FindOneAndReplace<TProjection>(
FilterDefinition<TDocument> filter,
TDocument replacement,
FindOneAndReplaceOptions<TDocument, TProjection> options = null,
CancellationToken cancellationToken = null
)
最明显的是,返回类型和options参数不同。
ReplaceOne
返回ReplaceOneResult时,FindOneAndReplace
返回文档(请注意选项中的ReturnDocument属性)。
与ReplaceOptions
相比,FindOneAndReplaceOptions
的局限性很大,例如前者没有提供sort
属性,使您可以控制哪个文档将成为集合中第一个匹配的文档。如果您根据ID进行过滤,则没关系,但是如果您要替换最新的文档,则sort选项非常有用。
(旁注:我个人在https://docs.mongodb.com/manual/reference/method/db.collection.replaceOne/和https://docs.mongodb.com/manual/reference/method/db.collection.findOneAndReplace/处找到了文档,因为它们更详细地解释了用法并提供了一些示例。但是我不知道该怎么做。紧密匹配MongoDB C#驱动程序。)