Mongodb

$out 在 mongodb 分片中不起作用

  • September 4, 2017

在將輸出導出到其他集合時,我有點卡在 MongoDB 中。

設想 :

實際上,我想將我的結果查詢到另一個在普通 mongoDB 中成功的集合(沒有分片)。但是,當我對同一個數據庫進行分片時,Mongo DB 給我錯誤程式碼 13435,它無法從副本集中讀取,並給我以下錯誤集:

Error: command failed: {
   "ok" : 0,
   "errmsg" : "listIndexes failed: { ok: 0.0, errmsg: \"not master and slaveOk=false\", code: 13435, codeName: \"NotMasterNoSlaveOk\" }",
   "code" : 18631,
   "codeName" : "Location18631"
} : aggregate failed :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
doassert@src/mongo/shell/assert.js:16:14
assert.commandWorked@src/mongo/shell/assert.js:370:5
DBCollection.prototype.aggregate@src/mongo/shell/collection.js:1319:5
@(shell):1:1

目前正在開發以下版本的 mongoDB:版本:3.4.6 作業系統:Windows Server 2012

非常感謝 J Jussi,給了我正確的方向。

rs.slaveOK();在每個分片上執行命令,然後從 windows cmd 提示符執行包含$out參數的查詢,它成功執行,在我的目標表中給出了結果。

如果有人$out在 mongodb 查詢中使用參數將分片集合結果查詢到另一個集合,請按照以下步驟操作:

  1. rs.slaveOk();通過登錄每個主分片執行
  2. 連接到mongos服務。
  3. 執行包含$out參數的查詢。
  4. 你的結果會在那裡。

經過測試和驗證。

該錯誤消息表明,在您的集群中,有一個分片沒有可用的主分片,並且查詢轉到輔助分片,並且在目前配置下,不允許對輔助分片進行查詢。

那麼,沒有初選的原因是什麼?答案是解決問題的關鍵。

你能檢查(通過登錄到每個 RS)每個分片副本集都有可用的主副本嗎?第二種可能性是配置伺服器沒有您的分片配置的最新資訊……但是如果您的集群以其他方式工作正常,那應該是不可能的。

引用自:https://dba.stackexchange.com/questions/184869