一、Java连接 MongoDB
1.1 配置JAR包
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-java-driver</artifactId>
<version>3.2.2</version>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-sync</artifactId>
<version>3.10.2</version>
</dependency>
1.2 连接 MongoDB
1.2.1 新版本(3.7起)
//您可以在没有任何参数的情况下实例化MongoClient对象,以连接到localhost,27017端口上运行的的MongoDB实例
MongoClient mongoClient1 = MongoClients.create();
MongoClient mongoClient2 = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(new Block<ClusterSettings.Builder>() {
@Override
public void apply(ClusterSettings.Builder builder) {
builder.hosts(Arrays.asList(new ServerAddress("hostOne",27108)));
}
})
.build());
// 推荐使用URI方式连接
MongoClient mongoClient = MongoClients.create("mongodb://139.159.135.115:27017");
1.2.2 老版本(3.7以前)
MongoClient mongoClient1 = new MongoClient();
MongoClient mongoClient2 = new MongoClient( "hostOne" );
MongoClient mongoClient3 = new MongoClient( "hostOne" , 27018 );
// 您可以指定 MongoClientURI连接字符串:
MongoClientURI connectionString = new MongoClientURI("mongodb://hostOne:27017,hostTwo:27017");
MongoClient mongoClient4 = new MongoClient(connectionString);
1. 3 访问数据库
指定getDatabase()方法的数据库名称。如果数据库不存在,MongoDB会在您第一次存储该数据库的数据时创建数据库。
以下示例访问mydb数据库:
// MongoDatabase 实例是不可变的。
MongoDatabase database = mongoClient.getDatabase("mydb");
1.4 访问集合
指定getCollection()方法的集合名称。如果集合不存在,MongoDB会在您第一次存储该集合的数据时创建集合。
// MongoCollection 实例是不可变的。
// 访问test集合
MongoCollection<Document> collection = database.getCollection("test");
1.5 创建文档
{
"name" : "MongoDB",
"type" : "database",
"count" : 1,
"versions": [ "v3.2", "v3.0", "v2.6" ],
"info" : { x : 203, y : 102 }
}
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));
1.6 插入文档
获得MongoCollection对象后,可以将文档插入集合中。
1)插入一个文档
collection.insertOne(doc);
1.7 插入多个文档
List<Document> documents = new ArrayList<Document>();
for (int i = 0; i < 100; i++) {
documents.add(new Document("i", i));
}
// 插入多个文档
collection.insertMany(documents);
1.8 计算集合中的文档
collection.countDocuments()
1.9 查询集合
要查询集合,可以使用集合的find()方法。您可以在不使用任何参数的情况下调用方法来查询集合中的所有文档,也可以通过过滤器来查询与过滤条件匹配的文档。
该find()方法返回一个FindIterable()实例,该实例为链接其他方法提供了流畅的接口。
1)查找集合中的第一个文档
Document myDoc = collection.find().first();
System.out.println(myDoc.toJson());
2)查找集合中的所有文档
MongoCursor<Document> cursor = collection.find().iterator();
try {
while (cursor.hasNext()) {
System.out.println(cursor.next().toJson());
}
} finally {
cursor.close();
}
1.10 指定查询过滤器
要查询符合特定条件的文档,请将过滤器对象传递给该find()方法
1)获取与筛选器匹配的单个文档
myDoc = collection.find(eq("i", 71)).first();
System.out.println(myDoc.toJson());
2)获取与筛选器匹配的所有文档
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);
3)要指定范围的过滤器,例如50 < i <= 100,您可以使用and:
collection.find(and(gt("i", 50), lte("i", 100))).forEach(printBlock);
1.11 更新文件
要更新集合中的文档,可以使用集合updateOne 和 updateMany方法。
传递给方法:
- 用于确定要更新的文档的过滤器对象。
- 指定修改的更新文档。
1)更新单个文档
以下示例更新满足过滤器i等于的第一个文档,10并将值设置i为110:
collection.updateOne(eq("i", 10), new Document("$set", new Document("i", 110)));
2)更新多个文档
以下示例为= 小于的所有文档递增iby 的值:100i100
UpdateResult updateResult = collection.updateMany(lt("i", 100), inc("i", 100));
System.out.println(updateResult.getModifiedCount());
1.12 删除文件
要从集合中删除文档,可以使用集合deleteOne和deleteMany方法。
将过滤器对象传递给方法以确定要删除的文档。
delete方法返回一个DeleteResult 提供有关操作的信息,包括删除的文档数。
1)删除与筛选器匹配的单个文档
// 最多删除一个满足过滤器i等于的文档110
collection.deleteOne(eq("i", 110));
2)删除与过滤器匹配的所有文档
// 删除i大于或等于的所有文档100
DeleteResult deleteResult = collection.deleteMany(gte("i", 100));
System.out.println(deleteResult.getDeletedCount());
1.13 创建索引
要在一个或多个字段上创建索引,请将索引规范文档传递给该createIndex()方法。索引键规范文档包含要索引的字段和每个字段的索引类型:
new Document(<field1>, <type1>).append(<field2>, <type2>) ...
- 对于上升的指数型,指定1为。
- 对于降序索引类型,指定-1的。
// i字段上创建升序索引:
collection.createIndex(new Document("i", 1));