Java MongoDB Driver 3.x - Quick Start
Maven Dependency:
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.2.2</version>
</dependency>
Make a Connection
The following example shows five ways to connect to the database mydb on the local machine. If the database does not exist, MongoDB will create it for you.
// To directly connect to a single MongoDB server, default host is 127.0.0.1 and default port is 27017
// (this will not auto-discover the primary even if it's a member of a replica set)
MongoClient mongoClient = new MongoClient(); // or
MongoClient mongoClient = new MongoClient( "localhost" ); // or
MongoClient mongoClient = new MongoClient( "localhost" , 27017 ); // or, to connect to a replica set, with auto-discovery of the primary, supply a seed list of members
MongoClient mongoClient = new MongoClient(
Arrays.asList( new ServerAddress("localhost", 27017),
new ServerAddress("localhost", 27018),
new ServerAddress("localhost", 27019))); // or use a connection string
MongoClientURI connectionString = new MongoClientURI("mongodb://localhost:27017,localhost:27018,localhost:27019");
MongoClient mongoClient = new MongoClient(connectionString); MongoDatabase database = mongoClient.getDatabase("mydb");
At this point, the database object will be a connection to a MongoDB server for the specified database.
MongoClient
The MongoClient instance actually represents a pool of connections to the database; you will only need one instance of class MongoClient even with multiple threads.
IMPORTANT
Typically you only create one MongoClient instance for a given database cluster and use it across your application. When creating multiple instances:
- All resource usage limits (max connections, etc) apply per MongoClient instance
 - To dispose of an instance, make sure you call MongoClient.close() to clean up resources
 
Get a Collection
To get a collection to operate upon, specify the name of the collection to the getCollection() method. The following example gets the collection test:
MongoCollection<Document> collection = database.getCollection("test");
Insert a Document
Once you have the collection object, you can insert documents into the collection. For example, consider the following JSON document; the document contains a field info which is an embedded document:
{
    "name": "MongoDB",
    "type": "database",
    "count": 1,
    "info": {
        "x": 203,
        "y": 102
    }
}
To create the document using the Java driver, use the Document class. You can use this class to create the embedded document as well.
Document doc = new Document("name", "MongoDB")
               .append("type", "database")
               .append("count", 1)
               .append("info", new Document("x", 203).append("y", 102));
To insert the document into the collection, use the insertOne() method.
collection.insertOne(doc);
Add Multiple Documents
To add multiple documents, you can use the insertMany() method. The following example will add multiple documents of the form:
{ "i" : value }
Create the documents in a loop.
List<Document> documents = new ArrayList<Document>();
for (int i = 0; i < 100; i++) {
documents.add(new Document("i", i));
}
To insert these documents to the collection, pass the list of documents to the insertMany() method.
collection.insertMany(documents);
Count Documents in A Collection
Now that we’ve inserted 101 documents (the 100 we did in the loop, plus the first one), we can check to see if we have them all using the count() method. The following code should print 101.
System.out.println(collection.count());
Query the Collection
Use the find() method to query the collection.
Find the First Document in a Collection
To get the first document in the collection, call the first() method on the find() operation. collection.find().first() returns the first document or null rather than a cursor. This is useful for queries that should only match a single document, or if you are interested in the first document only.
The following example prints the first document found in the collection.
Document myDoc = collection.find().first();
System.out.println(myDoc.toJson());
The example should print the following document:
{ "_id" : { "$oid" : "583c1f1ac18c6ca940773ba3" }, "name" : "MongoDB", "type" : "database", "count" : 1, "info" : { "x" : 203, "y" : 102 } }
NOTE
The _id element has been added automatically by MongoDB to your document and your value will differ from that shown. MongoDB reserves field names that start with “_” and “$” for internal use.
Find All Documents in a Collection
To retrieve all the documents in the collection, we will use the find() method. The find() method returns a FindIterable instance that provides a fluent interface for chaining or controlling find operations. Use the iterator() method to get an iterator over the set of documents that matched the query and iterate. The following code retrieves all documents in the collection and prints them out (101 documents):
MongoCursor<Document> cursor = collection.find().iterator();
try {
while (cursor.hasNext()) {
System.out.println(cursor.next().toJson());
}
} finally {
cursor.close();
}
Although the following idiom is permissible, its use is discouraged as the application can leak a cursor if the loop terminates early:
for (Document cur : collection.find()) {
    System.out.println(cur.toJson());
}
Get A Single Document with a Query Filter
We can create a filter to pass to the find() method to get a subset of the documents in our collection. For example, if we wanted to find the document for which the value of the “i” field is 71, we would do the following:
import static com.mongodb.client.model.Filters.*;
myDoc = collection.find(eq("i", 71)).first();
System.out.println(myDoc.toJson());
and it should just print just one document
{ "_id" : { "$oid" : "583c1f6bc18c6cac30e6cc1b" }, "i" : 71 }
NOTE
Use the Filters, Sorts, Projections and Updates helpers for simple and concise ways of building up queries.
Get a Set of Documents with a Query
We can use the query to get a set of documents from our collection. For example, if we wanted to get all documents where "i" > 50, we could write:
// now use a range query to get a larger subset
Block<Document> printBlock = new Block<Document>() {
@Override
public void apply(final Document document) {
System.out.println(document.toJson());
}
};
collection.find(gt("i", 50)).forEach(printBlock);
Notice we use the forEach method on FindIterable which applies a block to each document and we print all documents where i > 50.
We could also get a range, say 50 < i <= 100:
collection.find(and(gt("i", 50), lte("i", 100))).forEach(printBlock);
Sorting documents
We can also use the Sorts helpers to sort documents. We add a sort to a find query by calling the sort() method on a FindIterable. Below we use the exists() helper and sort descending("i") helper to sort our documents:
myDoc = collection.find(exists("i")).sort(descending("i")).first();
System.out.println(myDoc.toJson());
Projecting fields
Sometimes we don’t need all the data contained in a document, the Projections helpers help build the projection parameter for the find operation. Below we’ll sort the collection, exclude the _id field by using the Projections.excludeId and output the first matching document:
myDoc = collection.find().projection(excludeId()).first();
System.out.println(myDoc.toJson());
Aggregations
Sometimes we need to aggregate the data stored in MongoDB. The Aggregates helper provides builders for each of type of aggregation stage.
Below we’ll do a simple two step transformation that will calculate the value of i * 10. First we find all Documents where i > 0 by using the Aggregates.match helper. Then we reshape the document by using Aggregates.project in conjunction with the $multiply operator to calculate the “ITimes10” value:
collection.aggregate(asList(
match(gt("i", 0)),
project(Document.parse("{ITimes10: {$multiply: ['$i', 10]}}")))
).forEach(printBlock);
For $group operations use the Accumulators helper for any accumulator operations. Below we sum up all the values of i by using the Aggregates.group helper in conjunction with the Accumulators.sum helper:
myDoc = collection.aggregate(singletonList(group(null, sum("total", "$i")))).first();
System.out.println(myDoc.toJson());
NOTE
Currently, there are no helpers for aggregation expressions. Use the Document.parse() helper to quickly build aggregation expressions from extended JSON.
Updating documents
There are numerous update operators supported by MongoDB.
To update at most a single document (may be 0 if none match the filter), use the updateOne method to specify the filter and the update document. Here we use the Updates.set helper to update the first document that meets the filter i equals 10 and set the value of i to 110:
collection.updateOne(eq("i", 10), set("i", 110));
To update all documents matching the filter use the updateMany method. Here we use the Updates.inc helper to increment the value of i by 100 where i is less than 100.
UpdateResult updateResult = collection.updateMany(lt("i", 100), inc("i", 100));
System.out.println(updateResult.getModifiedCount());
The update methods return an UpdateResult which provides information about the operation including the number of documents modified by the update.
Deleting documents
To delete at most a single document (may be 0 if none match the filter) use the deleteOne method:
collection.deleteOne(eq("i", 110));
To delete all documents matching the filter use the deleteMany method. Here we delete all documents where i is greater or equal to 100:
DeleteResult deleteResult = collection.deleteMany(gte("i", 100));
System.out.println(deleteResult.getDeletedCount());
The delete methods return a DeleteResult which provides information about the operation including the number of documents deleted.
Bulk operations
These new commands allow for the execution of bulk insert/update/delete operations. There are two types of bulk operations:
- Ordered bulk operations.
Executes all the operation in order and error out on the first write error.
 - Unordered bulk operations.
Executes all the operations and reports any the errors.
Unordered bulk operations do not guarantee order of execution. 
Let’s look at two simple examples using ordered and unordered operations:
// 2. Ordered bulk operation - order is guarenteed
collection.bulkWrite(
Arrays.asList(new InsertOneModel<>(new Document("_id", 4)),
new InsertOneModel<>(new Document("_id", 5)),
new InsertOneModel<>(new Document("_id", 6)),
new UpdateOneModel<>(new Document("_id", 1),
new Document("$set", new Document("x", 2))),
new DeleteOneModel<>(new Document("_id", 2)),
new ReplaceOneModel<>(new Document("_id", 3),
new Document("_id", 3).append("x", 4)))); // 2. Unordered bulk operation - no guarantee of order of operation
collection.bulkWrite(
Arrays.asList(new InsertOneModel<>(new Document("_id", 4)),
new InsertOneModel<>(new Document("_id", 5)),
new InsertOneModel<>(new Document("_id", 6)),
new UpdateOneModel<>(new Document("_id", 1),
new Document("$set", new Document("x", 2))),
new DeleteOneModel<>(new Document("_id", 2)),
new ReplaceOneModel<>(new Document("_id", 3),
new Document("_id", 3).append("x", 4))),
new BulkWriteOptions().ordered(false));
IMPORTANT
Use of the bulkWrite methods is not recommended when connected to pre-2.6 MongoDB servers, as this was the first server version to support bulk write commands for insert, update, and delete in a way that allows the driver to implement the correct semantics for BulkWriteResult and BulkWriteException. The methods will still work for pre-2.6 servers, but performance will suffer, as each write operation has to be executed one at a time.
Java MongoDB Driver 3.x - Quick Start的更多相关文章
- java MongoDB driver error infos
		
DataTables warning: table id=dateTable - Ajax error. For more information about this error, please s ...
 - Java + MongoDB Hello World Example--转载
		
原文地址:http://www.mkyong.com/mongodb/java-mongodb-hello-world-example/ A simple Java + MongoDB hello w ...
 - MongoDB系列:五、MongoDB Driver使用正确的姿势连接复制集
		
MongoDB复制集(Replica Set)通过存储多份数据副本来保证数据的高可靠,通过自动的主备切换机制来保证服务的高可用.但需要注意的时,连接副本集的姿势如果不对,服务高可用将不复存在. 使用复 ...
 - 【MongoDB数据库】Java MongoDB CRUD Example
		
上一页告诉我们MongoDB 命令入门初探,本篇blog将基于上一篇blog所建立的数据库和表完毕一个简单的Java MongoDB CRUD Example.利用Java连接MongoDB数据库,并 ...
 - MongoDB Driver 简单的CURD
		
c#中我们可以使用MongoDB.Driver驱动进行对MongoDB数据库的增删改查. 首先需要在NuGet中安装驱动 安装完毕后会发现会有三个引用 其中 MongoDB.Driver和MongoD ...
 - c# MongoDB Driver  官方教程翻译
		
先贴官方文档地址:http://mongodb.github.io/mongo-csharp-driver/2.5/getting_started/quick_tour/ 安装部分很简单,nuget搜 ...
 - 基于MongoDB.Driver的扩展
		
由于MongoDB.Driver中的Find方法也支持表达式写法,结合[通用查询设计思想]这篇文章中的查询思想,个人基于MongoDB扩展了一些常用的方法. 首先我们从常用的查询开始,由于MongoD ...
 - C# mongoDB Driver 使用对象方式查询语法大全
		
#region 查询方法 /// <summary> /// 获取单个对象 /// </summary> /// <typeparam name="T" ...
 - php  MongoDB driver 查询实例
		
//是否只查mx $mx_on_switch = I("post.mx_on_switch"); //mx模糊查询 $mx_vague_check = I("post.m ...
 
随机推荐
- 集合引入(ArrayList、LinkedList)
			
1.引入 代替数组固定大小操作不变 2.ArrayList 常用的操作(add,remove) 3.LinkedList 能实现一些特殊的操作(pop)
 - http协议详细介绍
			
HTTP协议/IIS 原理及ASP.NET运行机制浅析[图解] 转自:http://www.cnblogs.com/wenthink/archive/2013/05/06/HTTP_IIS_ASPNE ...
 - 如何在Visual Studio中选择C++和C#的编译器版本
			
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:如何在Visual Studio中选择C++和C#的编译器版本.
 - const修饰的双重指针赋值解惑
			
在c程序中,我们可能经常会使用到指针之间的赋值. 传统的赋值操作: char *cp = "c"; const char *ccp; ccp = cp; printf(" ...
 - 配置iSCSI多路径
			
1.添加MPIO功能,完成后打开MPIO进行配置,添加对iSCSI多路径的支持,如下图表示已经添加完成后灰色不可选,再打开 MPIO设备 标签页可以看到已安装完成的MPIO所支持的设备:
 - Flash Builder 4.6 界面显示一半中文一半英文?
			
Flash Builder 4.6 (简称 Flex 4.6 或 FB 4.6)启动后界面有时候会显示一半中文,一半英文(这种奇葩的情况一般发生在 FB 4.6 刚安装后或操作系统安装一个类似 SP1 ...
 - 怎么去掉li标签前面的点??
			
<ul class="list"> <li> </li> <li> </li> </ul> .list li ...
 - 在Zend Studio中为ThinkPHP添加代码自动提示功能
			
身边很多朋友都使用ThinkPHP或CodeIgniter等开发框架为自己的项目提高开发效率. 在得力于这些优秀框架良好的设计结构的同时,也头疼于代码的自动完成提示功能没有纯PHP网站那么完善了.经常 ...
 - [AngularJS] Consistency between ui-router states and Angular directives
			
ui-router's states and AngularJS directives have much in common. Let's explores the similarities bet ...
 - iOS开发技巧系列---详解KVC(我告诉你KVC的一切)
			
KVC(Key-value coding)键值编码,单看这个名字可能不太好理解.其实翻译一下就很简单了,就是指iOS的开发中,可以允许开发者通过Key名直接访问对象的属性,或者给对象的属性赋值.而不需 ...