MongoDB Driver
此系列教程使用MongoDB Driver的版本为3.4.3。Maven安装方式
<dependencies>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver</artifactId>
<version>3.4.3</version>
</dependency>
</dependencies>
导入的包为
import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoCollection;
import org.bson.Document;
import java.util.Arrays;
import com.mongodb.Block;
import com.mongodb.client.MongoCursor;
import static com.mongodb.client.model.Filters.*;
import com.mongodb.client.result.DeleteResult;
import static com.mongodb.client.model.Updates.*;
import com.mongodb.client.result.UpdateResult;
import java.util.ArrayList;
import java.util.List;
创建连接
使用MongoClient()创建一个连接MongoDB实例的连接。MongoClient 自带一个连接数据的连接池,所以在整个应用中只需要一个MongoClient的示例即可。 可以通过如下方式创建一个MongoDB的连接
MongoClient mongoClient = new MongoClient();
MongoClient mongoClient = new MongoClient( "localhost" );
MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
MongoClientURI connectionString = new MongoClientURI("mongodb://localhost:27017");
MongoClient mongoClient = new MongoClient(connectionString);
访问数据库
获取到MongoClient的实例后,可以使用MongoClient.getDatabase() 来访问数据库,如果访问的数据库不存在,MongoDB会先创建一个数据库。
MongoDatabase database = mongoClient.getDatabase("mydb");
访问Collection
从上面的代码中,获取到数据库实例之后,就可以通过他使用getCollection()来访问Collection了,如果collection不存在,MongoDB会在第一次存数据的时候创建Collection。
MongoCollection<Document> collection = database.getCollection("test");
创建Document
通过Document类,可以在Collection中创建一个Document,例如想要创建如下的JSON数据
{
"name" : "MongoDB",
"type" : "database",
"count" : 1,
"versions": [ "v3.2", "v3.0", "v2.6" ],
"info" : { x : 203, y : 102 }
}
使用如下代码创建,通过Collection.insertOne() 方法插入一条数据:
Document doc = new Document("name", "MongoDB")
.append("type", "database")
.append("count", 1)
.append("versions", Arrays.asList("v3.2", "v3.0", "v2.6"))
.append("info", new Document("x", 203).append("y", 102));
collection.insertOne(doc);
如果要插入多条数据可以使用insertMany()方法
List<Document> documents = new ArrayList<Document>();
for (int i = 0; i < 100; i++) {
documents.add(new Document("i", i));
}
collection.insertMany(documents);
统计Collection中的Document
通过使用count()函数,可以统计collection中的Document数量
System.out.println(collection.count());
查询Collection
使用Collection的find()方法可以查询Collection中的Document。find()不加入任何参数,则会查询所有的Document。find()方法返回FindIterable实例,通过他可以遍历find()返回的结果集。如果仅对第一个Document返回结果有兴趣,可以使用first()。
Document myDoc = collection.find().first();
System.out.println(myDoc.toJson());
返回的结果可能是
{ "_id" : { "$oid" : "551582c558c7b4fbacf16735" },
"name" : "MongoDB",
"type" : "database",
"count" : 1,
"info" : { "x" : 203, "y" : 102 } }
获取所有的Document
MongoCursor<Document> cursor = collection.find().iterator();
try {
while (cursor.hasNext()) {
System.out.println(cursor.next().toJson());
}
} finally {
cursor.close();
}
for (Document cur : collection.find()) {
System.out.println(cur.toJson());
}
使用Filters筛选需要的Document
获取单个Document
myDoc = collection.find(eq("i", 71)).first();
System.out.println(myDoc.toJson());
获取所有document
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);
collection.find(and(gt("i", 50), lte("i", 100))).forEach(printBlock);
更新文档
使用updateOne 更新单个文档,updateMany更新多个文档,通过Filters查询需要更新的Document
collection.updateOne(eq("i", 10), new Document("$set", new Document("i", 110)));
UpdateResult updateResult = collection.updateMany(lt("i", 100), inc("i", 100));
System.out.println(updateResult.getModifiedCount());
删除文档
使用deleteOne 删除单个文档,deleteMany删除多个文档
collection.deleteOne(eq("i", 110));
DeleteResult deleteResult = collection.deleteMany(gte("i", 100));
System.out.println(deleteResult.getDeletedCount());
创建索引
使用createIndex()创建索引
collection.createIndex(new Document("i", 1));
1 表示正序,-1 表示倒序