2015-12-01 137 views
1

我有一個名爲test2的分片羣集。MongoDB:在分片羣集上查詢

db.collection.getShardDistribution()使我這個: enter image description here

爲什麼我.count()查詢只能通過shard0000文件返回shard0000總文檔和我的迭代只迭代?我需要做什麼才能使我的查詢返回整個集合?

System.out.println("Total docs: "+db.getCollection(collectionName).count()); 
    FindIterable<Document> iterable = db.getCollection(collectionName).find(); 

我用不同的參數執行的任何查詢只是遍歷shard0000。

編輯連接字符串:

MongoClient mongoClient = new MongoClient("129.241.xxx.xx",27017); 

這是錯誤。應該是端口27023.謝謝!

+0

你能發佈你的連接字符串嗎?它指向mongos實例嗎?你的收藏和你的集羣有相同的名字? –

+0

你能更具體嗎? – kongshem

+1

您通過'mongos'實例查詢分片羣集,因此您需要連接到它。最有可能的是,你直接連接到shard0000。只要確保你連接到你的mongos實例。當然,只需通過[編輯它](http://stackoverflow.com/posts/34018856/edit) –

回答

2

問題是我在數據庫被分片後連接到錯誤的端口。我不得不修改我的連接字符串以使用我的mongo實例正在運行的正確端口。

這是我的連接字符串。

MongoClient mongoClient = new MongoClient("129.241.xxx.xx",27017); 

改變了口

MongoClient mongoClient = new MongoClient("129.241.xxx.xx",27023); 

...和它的工作。感謝@ Markus W Mahlberg指引我朝着正確的方向前進。

+0

另一方面,最好的做法是在端口27017上運行'mongos',因爲它可以防止無意中連接到碎片。 – Jaco