我读了很多MongoDB文档,但我不理解readConcern和readPreference选项之间的区别.

例如:如果我在我的阅读关注选项中设置"多数",并将"主要"设置为我的阅读偏好选项,结果会是什么?这两种 Select 似乎是矛盾的.

我知道在查询级别我只能设置readConcern首选项,但在客户端级别我也可以设置readPreference.

推荐答案

在副本集中,主MongoDB实例是接收所有写操作的主实例.

primary读取首选项是默认模式,与MongoDB客户端有关;driver/client option美元.这意味着您从首先写入数据的主实例中读取数据(在复制到其他副本集成员之前)

Read concern是副本集的query option.默认情况下,读取关注点为local.这将返回执行查询时可用的最新数据.数据可能尚未持久化到大多数副本集成员,可能会回滚.该选项可以设置为majority,这将使查询读取已持久化到大多数副本集成员且不会回滚的最新数据.但是,您必须正确设置(仅适用于WiredTiger引擎和其他一些要求…)而且,您可能会错过大多数副本集成员已写入但未持久化的较新数据.

假设您对阅读偏好和阅读关注使用默认选项.然后,MongoDB驱动程序将读取请求路由到主副本集成员(主实例),该实例将返回当时可用的最新数据.该数据可能没有持久化到大多数副本集成员,可能会回滚.

类似地,您可以考虑使用不同的阅读关注点和阅读偏好选项组合的用例.

  • 本地/初级优先
  • 本地/中学
  • 本地/中学Preferred
  • 本地/最近的
  • 多数/主要优先
  • 多数/中等
  • 多数/中等Preferred
  • 多数/最接近

MongoDB文档中描述了这些选项.有些组合在某些情况下可能有意义,而有些组合在其他情况下可能有意义.为了完整起见,我只是在这里列出了它们.我的解释如下:

  1. 根据读取首选项(驱动程序选项)路由请求
  2. 第二,根据读取关注选项(查询选项)执行请求

Mongodb相关问答推荐

MongoDB获取所有文档谁的S子文档只包含一个特定值?

匹配/筛选/投影对象中数组中数组中的嵌套字段

MongoDB - 将对象转换为数组

如何在 mongodb 中将一个方面的结果合并到一个有条件的列表中?

判断对象数组中的值是否存在golang

使用 MongoDb 处理迁移

Node.js 和 Passport 对象没有方法 validPassword

在 Nodejs 中配置最大旧空间大小

Mongoose 的保存回调是如何工作的?

如何在 Mongoose 中更新数组值

MongoDB聚合排序不起作用

有没有办法自动更新 MongoDB 中的两个集合?

Mongo:无法在 src/mongo/shell/mongo.js:145 连接到服务器 127.0.0.1:27017

如何为 node.js 中的 MongoDB 索引指定 javascript 对象中的属性顺序?

mongoose 使用 $cond 中的 $exists 聚合

如何在第一个文档中恢复 MongoDB ChangeStream 而不仅仅是在我开始收听后更改

在 MongoDB 中快速搜索数十亿个小文档的策略

通过浏览器连接mongodb?

MongoTemplate upsert - 从 pojo 进行更新的简单方法(哪个用户已编辑)?

MissingSchemaError:Schema hasn't been registered for model