2012-03-20 42 views
3

我有一個mongo(2.0.3)副本集。使用C#驅動程序查詢特定的mongo輔助功能

如果我使用標準c#驅動程序連接到特定節點(即我的連接字符串不包含多個主機)並指定slaveOk(),那麼該查詢是否會被該集合的隨機成員滿足,或者只有通過我連接的節點?

如果前者,我該如何實現後者?

謝謝。

回答

2

如果您的連接字符串只有一個主機名(並且沒有replicaSet = name或connect = replicaSet),C#驅動程序將直接連接到該服務器並僅使用它。

通過列出多個主機名(稱爲種子列表)或通過使用replicaSet = name或connect = replicaSet觸發副本集語義(其使用整個集)。

所以,如果你想只使用一臺主機,你是在正確的軌道上。您必須在連接字符串上指定slaveOk,否則如果該服務器不是主節點,則連接將失敗。

+0

感謝羅伯特。 MongoServerSettings類有一個名爲ConnectionMode的屬性,可以將其設置爲直接或副本集。你是否也許知道在上面指定的內容中這會產生什麼影響? – Nik 2012-03-25 16:20:35

+0

如果將連接模式設置爲replicaset,則即使連接字符串只有一個服務器,驅動程序也會使用副本集語義進行連接。通常情況下,連接模式是默認的(缺省情況下,對於具有單個服務器的連接字符串和對於具有多個服務器的連接字符串的複製集是直接的)。 – 2012-04-10 15:03:01

+1

這似乎不適用於MongoDb驅動程序2.0和MongoDb服務器3.0。另外,根據文檔,沒有slaveOk參數,readPreference在這裏也沒有幫助。 – 2015-10-04 22:00:47

1

指定connect = direct作爲連接字符串中的參數解決了我通過Powershell連接到輔助節點的問題。

+0

+1。看起來它沒有文檔,但它可以與2.x c#驅動程序完美配合(與僅適用於1.x的可接受解決方案相反) – Marcanpilami 2016-07-10 17:06:44

0

使用.WithReadPreference(ReadPreference.Secondary)爲集合提供商