4

I'm accessing a MongoDB and want to reuse typical command line queries also within Java. I know it is possible to use the BasicDBObject, but I want to use command line queries like this:

db.MyCollection.find()

I tried now using the command() method of the database:

MongoClient mongoClient = new MongoClient("localhost", 27017);
DB db = mongoClient.getDB("MyDatabase");
CommandResult result= db.command("db.MyCollection.find()");
JSONObject resultJson = new JSONObject(result.toString());
System.out.println(resultJson.toString(4));

But this returns me the following result.

"ok": 0,
"code": 59,
"errmsg": "no such cmd: db.MyCollection.find()",
"bad cmd": {"db.MyCollection.find()": true},
"serverUsed": "localhost:27017"

How can I run a command line query within Java?

I do not want to use the DBCollection class - because then it's not anymore possible to run queries for different collections.

DBCollection collection = db.getCollection("MyCollection");
collection.find(); //NOT THIS
2
  • Why would you want to trade a perfectly save API for one vulnerable to injection attacks? Do you have a good reason for this except personal preference for syntax? Commented Oct 15, 2014 at 14:22
  • Yes, I would like to offer a small API for our non-java based software - which does not have a mongodb interface. So I need to have a class which can run different queries. Commented Oct 15, 2014 at 14:36

1 Answer 1

6

I don't think you can do that. With db.command() you are limited to these commands. Maybe you could get something like this to work (I'm having problems with getting expected results)

    final DBObject command = new BasicDBObject();
    command.put("eval", "function() { return db." + collectionName + ".find(); }");
    CommandResult result = db.command(command);

BTW, why don't you use chained calls like db.getCollection(collectionName).find(); to avoid sticking to one collection?

Sign up to request clarification or add additional context in comments.

7 Comments

Getting exception "Caused by: com.mongodb.MongoCommandException: Command failed with error 13: 'not authorized on bapdocdb_pricing to execute command { eval:.... on server ...:27017. The full response is { "ok" : 0.0, "errmsg" : "not authorized on bapdocdb_pricing to execute command { eval: \"...\" }", "code" : 13, "codeName" : "Unauthorized" }
@myuce Does this help?
Thank you Predrag, went to use the hard way and started using aggregate function :).
@PredragMaric now eval is deprecated , any alternative way to do this
@Anshul Don't know, sorry. Haven't been working with mongodb in a long time.
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.