2015-12-01 88 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