2012-05-01 5 views
6

ausführen Ich möchte soem Admin-Befehl mit Parametern aus Java ausführen.wie mongo Admin-Befehl von Java

Die Befehle sind:

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

Wie kann ich es von Java-Treiber zu tun?

Der folgende Code nicht funktioniert nicht:

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

Antwort

14

Ich fand es einfach

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

Diese Antwort war nützlich für mich. Ich möchte nur darauf hinweisen, dass ich mich mit einem 'Mongo' verbinden musste, ein einfacher' Mongod' ist nicht genug. Es mag offensichtlich sein, aber ich habe es hier nicht explizit gesehen. – jmmut

+0

'mongo.getDb (" admin "). RunCommand' wäre intuitiver. –

-1

Haben Sie dafür gesorgt, dass erfolgreich auf den db authentifiziert haben?

Haben Sie versucht db.eval (COMMAND_THAT_YOU_WANT_TO_EVAL);

+0

db.eval() hat zwei Argumente. Ich weiß nicht, was Objects ... args sein sollte – Julias

+0

Sie möchten vielleicht @Julias genauer betrachten. Das zweite Argument ist eine Argumentliste mit variabler Länge. Dies bedeutet, dass es null oder mehr Argumente geben kann. – user1367351

+0

Beachten Sie, dass dies nicht in Sharked-Umgebungen funktioniert –

0

Ich möchte nur hinzufügen, dass Julias Antwort korrekt ist, aber jetzt ist es veraltet. könnten Sie verwenden, um neue API (Document Klasse von Paket 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))); 
Verwandte Themen