MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。本文介绍了Java操作MongoDB数据库的使用。

模式自由 :可以把不同结构的文档存储在同一个数据库里
面向集合的存储:适合存储 JSON风格文件的形式
完整的索引支持:对任何属性可索引
复制和高可用性:支持服务器之间的数据复制,支持主-从模式及服务器之间的相互复制。复制的主要目的是提供冗余及自动故障转移
自动分片:支持云级别的伸缩性:自动分片功能支持水平的数据库集群,可动态添加额外的机器
丰富的查询:支持丰富的查询表达方式,查询指令使用JSON形式的标记,可轻易查询文档中的内嵌的对象及数组
快速就地更新:查询优化器会分析查询表达式,并生成一个高效的查询计划
高效的传统存储方式:支持二进制数据及大型对象(如照片或图片)
客户端MongoDBCompass,下载地址:
https://www.mongodb.com/try/download/compass
这次先不自己安装了,看到阿里云有试用,于是花费9.9元购买了三个月的试用。
阿里有很多选项提供选购,这次购买的是Serverless实例,Serverless轻量级低成本;单节点高性价比;多节点副本集保障业务高可用;分片集群自由配置弹性扩展。
购买地址:https://www.aliyun.com/product/mongodb
为了方便测试使用,做如下操作:
购买后进入控制台,重置mongodb密码

然后进入数据库连接,申请一个公网进行访问
然后进入安全设置,设置允许所有人访问

然后在工具输入公网访问地址:
mongodb://用户名:密码@连接地址:端口/admin
具体连接地址从阿里复制即可,复制过来的连接信息只要改下你的密码即可,然后就可以进入管理页面

Maven中引入MongoDB客户端
<dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>3.0.4</version> </dependency>
MongoDB的3.x版本Java驱动相对2.x做了全新的设计,类库和使用方法上有很大区别。
例如用Document替换BasicDBObject、通过Builders类构建Bson替代直接输入$命令等。
以下JAVA代码演示了对于MongoDB的增删改查操作
package com.example.zMongoDB;
import java.util.ArrayList;
import java.util.List;
import org.bson.Document;
import org.bson.conversions.Bson;
import com.mongodb.BasicDBObject;
import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;
public class MongoDBJDBC {
private static MongoClient mongoClient = null;
public static void main(String args[]) {
testQuery();
}
public static void testQuery() {
MongoDatabase mongoDatabase = getDB();
// 这里的 "user" 表示集合的名字,如果指定的集合不存在,mongoDB将会在你第一次插入文档时创建集合。
MongoCollection<Document> collection = mongoDatabase.getCollection("user");
// 查找集合中的所有文档
FindIterable<Document> findIterable = collection.find();
MongoCursor<Document> cursor = findIterable.iterator();
while (cursor.hasNext()) {
System.out.println(cursor.next());
}
// 指定查询过滤器
Bson filter = Filters.eq("name", "张1");
// 指定查询过滤器查询
findIterable = collection.find(filter);
cursor = findIterable.iterator();
while (cursor.hasNext()) {
System.out.println(cursor.next());
}
// 查找集合中的所有文档,-1表示倒序
findIterable = collection.find().sort(new BasicDBObject("age", -1));
// 取出查询到的第一个文档
Document document = (Document) findIterable.first();
// 打印输出
System.out.println(document);
closeDB();
}
public static void testUpdate() {
MongoDatabase mongoDatabase = getDB();
// 这里的 "user" 表示集合的名字,如果指定的集合不存在,mongoDB将会在你第一次插入文档时创建集合。
MongoCollection<Document> collection = mongoDatabase.getCollection("user");
// 修改过滤器
Bson filter = Filters.eq("name", "阿娇");
// 指定修改的更新文档
Document document = new Document("$set", new Document("age", 22));
// 修改单个文档
collection.updateOne(filter, document);
// 修改多个文档
collection.updateMany(filter, document);
closeDB();
}
public static void testDel() {
MongoDatabase mongoDatabase = getDB();
// 这里的 "user" 表示集合的名字,如果指定的集合不存在,mongoDB将会在你第一次插入文档时创建集合。
MongoCollection<Document> collection = mongoDatabase.getCollection("user");
// 申明删除条件,eq等于,也可以设置大于小于等条件
Bson filter = Filters.eq("age", 18);
// 删除与筛选器匹配的单个文档
collection.deleteOne(filter);
// 删除与筛选器匹配的所有文档
collection.deleteMany(filter);
closeDB();
}
public static void testAdd() {
MongoDatabase mongoDatabase = getDB();
// 这里的 "user" 表示集合的名字,如果指定的集合不存在,mongoDB将会在你第一次插入文档时创建集合。
MongoCollection<Document> collection = mongoDatabase.getCollection("user");
Document document = new Document("name", "阿娇").append("sex", "女").append("age", 18);
collection.insertOne(document);
// 要插入的数据
List<Document> list = new ArrayList<>();
for (int i = 1; i <= 3; i++) {
Document documents = new Document("name", "张" + i).append("sex", "男").append("age", 20 + i);
list.add(documents);
}
// 插入多个文档
collection.insertMany(list);
closeDB();
}
public static MongoDatabase getDB() {
List<ServerAddress> adds = new ArrayList<>();
ServerAddress serverAddress = new ServerAddress("地址", 3717);
adds.add(serverAddress);
List<MongoCredential> credentials = new ArrayList<>();
// 用户名 数据库名称 密码
MongoCredential mongoCredential = MongoCredential.createScramSha1Credential("用户名", "admin",
"密码".toCharArray());
credentials.add(mongoCredential);
mongoClient = new MongoClient(adds, credentials);
// 这里的 "test" 表示数据库名,若指定的数据库不存在,mongoDB将会在你第一次插入文档时创建数据库。
MongoDatabase mongoDatabase = mongoClient.getDatabase("test");
return mongoDatabase;
}
public static void closeDB() {
mongoClient.close();
}
}可以通过客户端看到已经录入进去的数据

END