Mongodb
$out 在 mongodb 分片中不起作用
在將輸出導出到其他集合時,我有點卡在 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 查詢中使用參數將分片集合結果查詢到另一個集合,請按照以下步驟操作:
rs.slaveOk();
通過登錄每個主分片執行- 連接到
mongos
服務。- 執行包含
$out
參數的查詢。- 你的結果會在那裡。
經過測試和驗證。
該錯誤消息表明,在您的集群中,有一個分片沒有可用的主分片,並且查詢轉到輔助分片,並且在目前配置下,不允許對輔助分片進行查詢。
那麼,沒有初選的原因是什麼?答案是解決問題的關鍵。
你能檢查(通過登錄到每個 RS)每個分片副本集都有可用的主副本嗎?第二種可能性是配置伺服器沒有您的分片配置的最新資訊……但是如果您的集群以其他方式工作正常,那應該是不可能的。