Mongodb 使用c#驱动程序查询特定mongo secondary

Mongodb 使用c#驱动程序查询特定mongo secondary,mongodb,mongodb-.net-driver,Mongodb,Mongodb .net Driver,我有一个mongo(2.0.3)副本集 如果我使用标准c#driver连接到一个特定节点(即我的连接字符串不包含多个主机),并指定slaveOk(),那么该查询是由集合中的随机成员满足,还是仅由我连接到的节点满足 如果是前者,我如何才能实现后者 多谢各位 如果您的连接字符串只有一个主机名(并且没有replicaSet=name或connect=replicaSet),C#驱动程序将以直接模式连接到该服务器并仅使用它 通过列出多个主机名(称为种子列表),或使用replicaSet=name或con

我有一个mongo(2.0.3)副本集

如果我使用标准c#driver连接到一个特定节点(即我的连接字符串不包含多个主机),并指定slaveOk(),那么该查询是由集合中的随机成员满足,还是仅由我连接到的节点满足

如果是前者,我如何才能实现后者


多谢各位

如果您的连接字符串只有一个主机名(并且没有replicaSet=name或connect=replicaSet),C#驱动程序将以直接模式连接到该服务器并仅使用它

通过列出多个主机名(称为种子列表),或使用replicaSet=name或connect=replicaSet,可以触发副本集语义(其中它使用整个集合)


因此,如果您只想使用一台主机,那么您的做法是正确的。您必须在连接字符串上指定slaveOk,否则如果该服务器不是主服务器,连接将失败。

在连接字符串中指定connect=direct作为参数,解决了我通过Powershell连接到辅助服务器的问题。

使用
。WithReadPreference(ReadPreference.Secondary)
为收藏提供商提供

谢谢Robert。MongoServerSettings类有一个名为ConnectionMode的属性,可以将其设置为直接或副本集。您可能知道这在您上面指定的上下文中有什么影响吗?如果您将连接模式设置为replicaset,则驱动程序将使用副本集语义进行连接,即使连接字符串只有一个服务器。通常情况下,连接模式是默认模式(默认模式是直接用于单个服务器的连接字符串,复制设置用于多个服务器的连接字符串)。这似乎不适用于MongoDb驱动程序2.0和MongoDb服务器3.0。此外,根据文档,没有slaveOk参数,readPreference在这里似乎也没有帮助。+1。它似乎没有文档记录,但它与2.xC#驱动程序完美配合(与公认的仅1.x的解决方案相反)