如果我使用MongoClient :: RP_SECONDARY的读取首选项向mongodb发布更新,我的更新操作是否可以读取过时记录以确定要更新哪些记录?
要明确我基本上要求将更新视为写操作,因此遵循“Secondardy - 复制主数据库内容的副本集成员。辅助成员可以处理读取请求,但只有主要成员才能处理写操作。参见Secondaries“
因此,如果mongo决定将操作拆分为两个独立的组件,查询部分将找到要更新的记录和写入部分,读取COULD会读取辅助数据的过期数据。
答案 0 :(得分:2)
MongoDB不会从更新中拆分查询。所有MongoDB驱动程序都使用MongoDB有线协议来发送和接收与它们连接的mongo实例的数据。更新,插入,查询和删除具有不同的操作码和格式。 OpCode OP_UPDATE,OP_INSERT和OP_DELETE都将其有效负载标识为对数据的更改,并始终路由到主数据库,并将考虑写入首选项。 OpCode OP_QUERY将使用读取首选项。
有关线路协议的更多详细信息:http://docs.mongodb.org/meta-driver/latest/legacy/mongodb-wire-protocol/