I was wondering if there is a way to execute mongo like query directly through Java i.e. we give mongoDB like query as a String to a function in Java driver for mongoDB as a String Object and an DBCursor Object is returned. Something like:
import com.mongodb.*;
import java.net.UnknownHostException;
public class ExecuteQuery {
public static void main(String args[]){
try{
Mongo m = new Mongo();
DB db = m.getDB("test");
DBCollection coll = db.getCollection("first");
DBObject doc = new BasicDBObject();
DBCursor cur =coll.executeQuery("db.first.find({"username":"joe"})");
}
catch(UnknownHostException e){
System.out.println(e);
}
catch (MongoException.DuplicateKey e) {
System.out.println("Exception Caught" + e);
}
}
}
Note: executeQuery()
is not a built in function. It is just used for demonstration purposes.
So, Is there a function in the java api which converts a json string to a BasicDBObject
instance? Thanks.
Connecting via Java. Assuming you've resolved your dependencies and you've set up your project, you're ready to connect to MongoDB from your Java application. Since MongoDB is a document database, you might not be surprised to learn that you don't connect to it via traditional SQL/relational DB methods like JDBC.
The $in operator allows you to write queries that will return documents with values matching one of multiple values held in an array. The following example query includes the $in operator, and will return documents whose name value matches either Everest or K2 : db.
The find() Method To query data from MongoDB collection, you need to use MongoDB's find() method.
Yes, there is way, by passing the filter as a string. Example:
BasicDBObject query = BasicDBObject.parse("{userId: {$gt: \"1\"}}");
FindIterable<Document> dumps = crapCollection.find(query);
You can Also use com.mongodb.util.JSON
, but I don't recommend it. It's less descriptive.
DBObject dbObject = (DBObject)JSON.parse("{userId: {$gt: \"1\"}}");
Please notice that this might be vulnerable to SQL injections because you parse/build the filter yourself.
I recommend using Jongo's parameterized query.
What you showed here is not JSON, it's Javascript code for embedded MongoDB Shell. If you need for some reason to execute the code inside Java environment you will have to embed Javascript engine (like Rhino) and implement compatible API.
Otherwise you just need to convert JSON to DBObject
and you can do this with JSON.parse() method or any other JSON-mapping library like Jackson. Note that MongoDB uses extended set of data types that are not present in JSON: http://www.mongodb.org/display/DOCS/Data+Types+and+Conventions
UPD: Scott Hernandez pointed out about JSON.parse
.
Take a look at the Jongo library - it will allow you to run even pretty advanced queries using the command-line syntax.
It also uses a very fast GSON mapper to return your own objects back to you as the result of the query, instead of a list of BasicDBObjects.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With