How to Query MongoDB® using Java
Overview
MongoDB is an open source document-oriented database that stores data as BSON (a binary-encoded serialization of Java Script Object Notation (JSON)) documents and supports dynamic data with no fixed schemas rather than relational tables. Interacting with MongoDB (a NoSQL system) is not done using SQL but rather using query APIs for various languages.
This article will cover how to access MongoDB using the Java driver. Another tutorial covers how to access MongoDB using a JDBC driver and SQL.
Step-by-Step JDBC Configuration
- Download Java Driver
- Put Driver in Classpath
- Establish A Connection
- Get Database
- Get Collections
- Getting A Single Document
- Getting Multiple Documents
- Inserting Documents
- Save, Update, Find, Delete
For more information, check out our Helpful Links and References.
Download MongoDBJava Driver
The first thing you will need to do is download the MongoDB Java Driver. Click here to download.
Put Driver in Classpath
Once you've downloaded the Java driver, put the JAR in your Java CLASSPATH. A common location is in the <JRE_HOME>\lib\ext folder of your Java JRE installation.
Establish A Connection
To make a connection, we will need to use the MongoClient class instance. The MongoClient class is thread safe which means only one instance is needed even if multiple threads are being used.
Note: You will need to know the IP address and port of the database you wish to connect to. If the database does not exist, MongoDB will create it for you.
Use the following code to make your connection.
import com.mongodb.MongoClient; import com.mongodb.MongoException; import com.mongodb.WriteConcern; import com.mongodb.DB; import com.mongodb.DBCollection; import com.mongodb.BasicDBObject; import com.mongodb.DBObject; import com.mongodb.DBCursor; import com.mongodb.ServerAddress; MongoClient mongoClient = new MongoClient( "localhost" , 27017 ); DB db = mongoClient.getDB( "mydb" );
User authentication
If you are running MongoDB in secure mode you will need user authentication to complete the connection. If so, use the following sample code:
MongoClient mongoClient = new MongoClient(); DB db = mongoClient.getDB("test"); boolean auth = db.authenticate(myUserName, myPassword);
To clean up your resources and dispose of an instance call:
mongoClient.close();
Get Database
Once a connection is established you can then use the getDB() method to get a database by name.
DB db = mongoClient.getDB( "mydb" );
To display all databases:
Listdbs = mongo.getDatabaseNames(); for(String db : dbs) { System.out.println(db); }
Getting Collections
Getting collections is a key step to being able to query and manipulate data. You can retrieve a colleciton by name using getCollection().
DBCollection coll = db.getCollection("testCollection");
To retrieve a list of collection names in the database:
Setcolls = db.getCollectionNames(); for (String s : colls) { System.out.println(s); }
Getting A Single Document
If you want to retrieve a single document from a collection you can use the find() method.
For Example: If you want to find the document for which the value of "i" is 52, we can use the following:
BasicDBObject query = new BasicDBObject("i", 52); cursor = coll.find(query); while(cursor.hasNext()) { System.out.println(cursor.next()); } cursor.close();
Note that $ operators used within MongoDB documentation are represented as DBObjects when using the Java driver. Example:
db.things.find({j: {$ne: 3}, k: {$gt: 10} });
Getting Multiple Documents
Multiple documents can be retrieved using a condition built from BasicDBObject. This example will return all documents where i > 52.
query = new BasicDBObject("i", new BasicDBObject("$gt", 52)); // e.g. find all where i > 52 cursor = coll.find(query);
Inserting Documents
Once you have your collection object you can then choose to insert documents by byuilding a BasicDBObject.
The following sample code is an example of a JSON document.{ "name" : "MongoDB", "type" : "database", "count" : 1, "info" : { x : 203, y : 102 } }
To build this using the BasicDBObject you need to use the insert() method to add it to the collection.
BasicDBObject doc = new BasicDBObject("name", "MongoDB"). append("type", "database"). append("count", 1). append("info", new BasicDBObject("x", 203).append("y", 102)); coll.insert(doc);
Save, Update, Find, & Delete
The following examples demonstrate how to save, update, find, and delete documents.
Save (Insert) a document
DBCollection col = db.getCollection("mycol"); BasicDBObject doc = new BasicDBObject(); doc.put("name", "Joe Smith"); doc.put("age", 25); doc.put("createdDate", new Date()); col.insert(document);
Update a document:
DBCollection col = db.getCollection("mycol"); BasicDBObject query = new BasicDBObject(); query.put("name", "MongoDB"); BasicDBObject newDocument = new BasicDBObject(); newDocument.put("name", "MongoDB-updated"); BasicDBObject updateObj = new BasicDBObject(); updateObj.put("$set", newDocument); col.update(query, updateObj);
Perform a query and list matching documents:
DBCollection col = db.getCollection("mycol"); BasicDBObject searchQuery = new BasicDBObject(); searchQuery.put("name", "Joe Smith"); // Find documents with Joe Smith in name field DBCursor cursor = table.find(searchQuery); while (cursor.hasNext()) { System.out.println(cursor.next()); }
Delete documents that match a given criteria:
DBCollection table = db.getCollection("user"); BasicDBObject searchQuery = new BasicDBObject(); searchQuery.put("name", "Joe Smith"); // Find documents with Joe Smith in name field table.remove(searchQuery); // Delete those matching documents
Helpful Links
References
Need help?
Unity Data will turn your data into business value. Contact us for a free consultation.