db.collection.findAndModify()
来读取不过时且不能回滚的数据。对于MongoDB 3.4,尽管可以应用概述的过程,但请参阅[“线性化”]([https://docs.mongodb.com/manual/reference/read-concern-linearizable/#readconcern.%22linearizable%22](https://docs.mongodb.com/manual/reference/read-concern-linearizable/#readconcern."linearizable"))阅读问题。db.collection.findAndModify()
读取不过期且无法回滚的数据。为此,该过程使用findAndModify()
具有写关注的方法来修改文档中的伪字段。具体来说,该过程要求:findAndModify()
必须使用写关注 。[{ w: "majority" }
](https://docs.mongodb.com/manual/reference/write-concern/#writeconcern."majority")[warning] 重要“仲裁读取”过程比单纯使用读取问题要花费大量成本,["majority"
](https://docs.mongodb.com/manual/reference/read-concern-majority/#readconcern."majority")因为它会导致写入延迟而不是读取延迟。仅在绝对不过期的情况下才应使用此技术。
_dummy_field
,该字段 db.collection.findAndModify()
在本教程中将通过递增 。如果该字段不存在,则该db.collection.findAndModify()
操作会将字段添加到文档中。该字段的目的是确保db.collection.findAndModify()
对文档进行修改。sku
现场使用完全匹配。这样,在sku
字段上创建唯一索引。findAndModify
读取提交的数据。db.collection.findAndModify()
方法对要阅读的文档进行简单更新,然后返回修改后的文档。需要写关注。要指定要阅读的文档,必须使用唯一索引支持的完全匹配查询。[{ w: "majority" }
](https://docs.mongodb.com/manual/reference/write-concern/#writeconcern."majority")findAndModify()
操作在唯一索引的字段sku
上指定精确匹配,并增加匹配文档中名为_dummy_field
的字段。虽然不是必需的,但该命令的写操作还包括一个5000毫秒的wtimeout
值,以防止在写操作不能传播到大多数投票成员时永远阻塞操作。w: "majority"
](https://docs.mongodb.com/master/reference/write-concern/#writeconcern."majority").完成写操作。因此,只有当客户机连接到真正的主服务器来执行操作时,具有[“多数”](https://docs.mongodb.com/master/reference/write-concern/#writeconcern."majority")写关注点的[`findAndModify()`](https://docs.mongodb.com/manual/reference/method/db.collection.findAndModify/#db.collection.findAndModify)方法才会成功。