话不多说,先上代码
配置依赖
<!-- MongoDB官方提供的Java驱动程序 -->
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.12.12</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<!-- 表示依赖不会传递 -->
<optional>true</optional>
</dependency>
配置信息
spring.data.mongodb.uri=mongodb://${userName}:${password}@${ip}:${port}/${dbName}?authMechanism=SCRAM-SHA-1&authSource=admin
1.mongodb://:这是MongoDB的URL前缀,表示这是一个MongoDB的连接请求
2.${userName}和${password}是用于认证的用户名和密码
3.${ip}:${port}是MongoDB服务器的IP地址和端口号
4.${dbName}是要连接的数据库名称
5.authMechanism=SCRAM-SHA-1指定了使用SCRAM-SHA-1认证机制进行身份验证
6.authSource=admin指定了用于身份验证的源数据库为"admin"
常用方法
@Autowired
private MongoTemplate mongoTemplate;
1. 增
mongoTemplate.insert(object);
2. 删
// 批量删除
// Query query = new query(new Criteria("id").in(ids));
Query query = new query(new Criteria("id").is(id));
mongoTemplate.remove(query, Object.class);
3. 改
Update update = new Update();
update.set("name", object.getName());
update.set("age", object.getAge());
mongolemplate.findAndModify(new Query(new Criteria("id").is(object.getId())), update, Object.class):
4. 查
// 根据id查
Query query = new query(new Criteria("id").is(id));
mongolemplate.findOne(query, Object.class);
// 根据对象的所有属性分页查
public List<TestMongo> selectTestMongolist(TestMongo testMongo){
// 构建查询条件
Criteria criteria = nul1:
Map map = JSONObject.parseobject(JSONObject,toJsoNstring(testMongo), Map.class);
for(object o : map.keyset()) {
criteria = getCriteria(criteria, o.tostring(), map.get(o));
}
Query query = criteria != null ? new Query(criteria) : new Query();
// 分页
if(testMongo.getPagesize () != 0) {
Pageable pageable = PageRequest,of(testMongo.getpageNum (), testMongo.getPagesize ());
}
query.with(pageable);
return mongoTemplate.find(query, TestMongo.class);
private static Criteria getCriteria(criteria criteria, String key, object value){
if (value != null) {
if (criteria == null) {
return Criteria.where(kev).is(value);
else{
return Criteria.where(key).is(value).andoperator(criteria);
}
return criteria;
}
动态连接Mongo
public class MongoUtil{
/**
* 获取数据库
* @param sysDataSource 数据源信息
* @return
*/
public static Mongoclient getMongoclient(String uri) {
return Mongoclients.create(uri);
}
/**
* 关闭连接
* @param mongoclient Mongoclient连接
*/
public static void closeMongoDb(Mongoclient mongoclient) {
if (mongoclient != null) {
mongoclient.close():
}
}
例:
/**
* 删除集合
* @param sysDataSource 数据源信息
* @param colLectionName 集合名
*/
public static void dropCollection(String dbName, String collectionName){
Mongoclient mongoclient = null;
try {
// 创建MongocTient连接
String uri = "mongodb://${userName}:${password}@${ip}:${port}/";
mongoclient = getMongoclient(uri);
MongoDatabase database = mongoclient.getDatabase(dbName);
// 获取集合
MongoCollection<Document> collection = database.getCollection(collectionName);
// 删除集合
collection.drop();
} catch (Exception e) {
log.error("删除集合失败");
throw new RuntimeException(e);
} finaly {
// 关闭连接
closeMongoDb(mongoctient);
}
}
}
基础知识
概述
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
MongoDB服务端可运行在Linux、Windows平台,支持32位和64位应用,默认端口为27017。
推荐运行在64位平台,因为MongoDB在32位模式运行时支持的最大文件尺寸为2GB。
中文官网:https://www.mongodb.com/zh-cn
特性
MySQL | MongoDB |
---|---|
Database(库) | Database(库) |
Table(表) | Collection(集合) |
Row(行) | Document (文档) |
Column(列) | Field(字段) |
集合
集合(Collection)是一组文档(Documents)的统称,类似于关系型数据库中的表(Table)。集合是由多个文档组成的,而每个文档都是一个键值对(Key-Value Pair)的集合。
集合不需要具有预定义的结构,即同一个集合中的文档可以具有不同的键和值。
文档
文档(Documents)是MongoDB中的基本单元,表示一个可存储在集合中的数据记录。一个文档相当于关系型数据库中的一行数据,包含了多个键值对,每个键都有一个名字和对应的值。需要注意的是,文档中的键/值对是有序的,值不仅可以是字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档),且MongoDB区分类型和大小写。
字段
字段(Fields)是文档中的键和值的配对,表示了文档中的一个特定属性或数据项。在MongoDB中,字段的值可以是各种类型的数据,包括字符串、数值、布尔值、日期、数组等。
其他
-
MongoDB使用“.”来分隔不同命名空间的子集合。
-
MongoDB有一些特殊的符号和保留的字段,如“_id”,“_class”等。
-
MongoDB支持丰富的查询操作,包括条件查询、聚合、分页等。
-
MongoDB支持索引,可以对任何属性进行索引,这有助于提高查询性能。
-
MongoDB具有复制和高可用性特性,支持服务器之间的数据复制,支持主-从模式及服务器之间的相互复制,复制的主要目的是提供冗余及自动故障转移。
-
MongoDB支持云级别的伸缩性,自动分片功能支持水平的数据库集群,可动态添加额外的机器。