2012-05-01 33 views
6

Tôi muốn thực hiện lệnh quản trị viên so với các tham số từ java.cách thực hiện lệnh quản trị mongo từ java

Các lệnh là:

{ enablesharding : "test" } 
{ shardcollection : "test.test_collection", key : {"number":1} } 

Làm thế nào tôi có thể làm điều đó từ tài xế java?

Các mã sau đây không hoạt động:

mongo.getDb("admin").command("{shardcollection : \"test.test_collection\", key:\"number\":1} }") 

Trả lời

14

Tôi chỉ tìm thấy nó

DB db = mongo.getDB("admin"); 
DBObject cmd = new BasicDBObject(); 
cmd.put("shardcollection", "testDB.x"); 
cmd.put("key", new BasicDBObject("userId", 1)); 
CommandResult result = db.command(cmd); 
+0

Câu trả lời này là hữu ích cho tôi. Tôi sẽ chỉ rằng tôi cần kết nối với một 'mongos', một' mongod' đơn giản là không đủ. Nó có thể hiển nhiên nhưng tôi không thấy nó ở đây một cách rõ ràng. – jmmut

+0

'mongo.getDb (" admin "). RunCommand' sẽ trực quan hơn. –

-1

Bạn đã đảm bảo bạn đã xác thực để các db thành công?

Bạn đã thử db.eval (COMMAND_THAT_YOU_WANT_TO_EVAL);

+0

db.eval() có hai đối số. Tôi không biết những gì đối tượng ... args nên được – Julias

+0

Bạn có thể muốn có một cái nhìn gần hơn @ Julias. Đối số thứ hai là một danh sách đối số độ dài thay đổi; điều này có nghĩa là có thể bằng không hoặc nhiều đối số. – user1367351

+0

Hãy nhớ điều này không hoạt động trong môi trường bị phân đoạn –

0

Tôi chỉ muốn thêm câu trả lời của Julias là chính xác, nhưng bây giờ nó không còn được dùng nữa. Bạn có thể sử dụng API mới (Document lớp là từ gói org.bson):

MongoDatabase database = client.getDatabase("admin"); 
Document documentA = database.runCommand(new Document("enablesharding", "test")); 
Document documentB = database.runCommand(
     new Document("shardcollection", "testDB.x").append("key", new Document("userId", 1))); 
Các vấn đề liên quan