mongodb c#API V2:ReplaceOne和FindOneAndReplace之间的区别

时间:2016-04-27 16:08:18

标签: mongodb mongodb-.net-driver

查看mongodb文档我读到FindOneAndReplace将是一个ATOMIC操作。但我不明白为什么ReplaceOne不会是原子的?如果存在差异,为什么要使用ReplaceOne?

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

文档提供了不同的方法签名:

ReplaceOne

ReplaceOneResult ReplaceOne(
    FilterDefinition<TDocument> filter,
    TDocument replacement,
    ReplaceOptions options = null,
    CancellationToken cancellationToken = null
)

FindOneAndReplace

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#驱动程序。)