1.什么是mongo?
mongo是一个文档数据库,是一种非关系型数据库,采用BSON存储文档数据,BSON是一种类json的一种二进制形式的存储格式,相对于json多了date类型和二进制数据。
2.mongo支持的数据类型?
String 、Integer 、Double 、Boolean 、Object、Arrays、Datetime、Code、Regular Expression(正则表达式)等。
3.mongo的术语
SQL术语/概念 | MongoDB术语/概念 | 解释/说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | 表连接,MongoDB不支持 | |
primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
注意:注意:mongo的数据库叫collection(集合),记录行叫document(文档),数据字段叫fleid(域)
4.mongo的下载和连接
mongo使用docker下载,下载后直接启动即可
# oracle连接配置
spring:
data:
mongodb:
host: 192.168.211.134 # MongoDB主机地址
port: 27017 # MongoDB端口号
database: bjsxt # 访问的数据库database名称
username: bjsxt # 登录用户名
password: bjsxt # 登录用户密码
authentication-database: admin # 认证数据库database名称
mongo依赖:
<!--MongoDB-->
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-sync</artifactId>
<version>4.0.5</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
5.mongoTemplate的使用:
1.创建实体类
1.@Document(collection = "address")
注解的作用是将Java类AddressInfoPO
映射到MongoDB中名为"address"的Collection,使得这个类的对象可以直接与该Collection进行数据交互。
2.@Id 标识主键。当主键叫做_id或id时可以省略此属性
3.@Field 放在普通属性上,如果希望对属性改名或其他限制需要此注解。可以省略,表示实体类属性名为Mongodb集合中field名称
@Document(collection = "address")
public class AddressInfoPO {/**
* 地址id 主键非空
*/
@Id
private String id;
/**
* 学生id
*/
private Integer studentId;
/**
* 所在省
*/
private String province;
}
2.查询
AddressInfoPO byId = mongoTemplate.findById(id, AddressInfoPO.class,"address");
三个参数都不能为空
这段代码的作用是通过MongoTemplate从名为"address"的Collection中根据ID查询一个AddressInfoPO
对象并返回。
3.新增
address = mongoTemplate.save(addressInfoPO, "address");
addressInfoPO
是要保存的对象, 不可以为为null,"address" 是集合名称。,不可以为null,根据调用 mongoTemplate.save(addressInfoPO, "address")
方法的代码,addressInfoPO
对象将被保存到名为 "address" 的集合中。
需要注意的是,save()
方法是一个通用的保存方法,如果待保存的对象在数据库中已经存在(根据 _id
字段判断),则会更新已有的文档,否则会插入新的文档。
4.修改
//查询条件
Query query = new Query(Criteria.where("_id").is(addressId));
//修改语句
Update update = new Update();
//根据地址id查出学生id
Integer studentId = studentInfoMapper.findStudentIdByAddressId(addressId);
//修改条件
update.set("studentId", studentId);
//执行修改地址操作
UpdateResult updateResult = mongoTemplate.updateFirst(query, update, AddressInfoPO.class);
这段代码用于在 MongoDB 中更新指定 _id
的文档,具体来说,它执行以下步骤:
-
创建一个
Query
对象,查询条件为_id
等于指定的addressId
。 -
创建一个
Update
对象,用于设置要修改的字段值。 -
调用
studentInfoMapper
的findStudentIdByAddressId()
方法,根据addressId
查找对应的学生 ID。 -
使用
Update
对象的set()
方法,将studentId
字段设置为查询到的学生 ID。 -
调用
mongoTemplate
的updateFirst()
方法,将query
、update
和AddressInfoPO.class
传递给该方法,以执行实际的更新操作。 -
返回类型为
UpdateResult
,表示更新操作的结果。
需要注意的是,这段代码中的 AddressInfoPO.class
参数指定了要更新的集合的映射实体类,这样可以确保更新操作只会影响到 AddressInfoPO
类型的文档。如果指定的实体类与集合中的文档不匹配,则更新操作可能会出错。
另外,updateFirst()
方法是一个通用的更新方法,它可以处理多种更新操作,例如设置字段值、增加字段值、删除字段值等。具体的更新操作可以通过 Update
对象的不同方法来实现,例如 set()
、inc()
、unset()
等。
5.删除
Query query = new Query(Criteria.where("_id").is(addressId));
mongoTemplate.remove(query, AddressInfoPO.class);
-
创建一个
Query
对象,查询条件为_id
等于指定的addressId
。 -
调用
mongoTemplate
的remove()
方法,将query
和AddressInfoPO.class
传递给该方法,以执行实际的删除操作。
需要注意的是,这段代码中的 AddressInfoPO.class
参数指定了要删除的集合的映射实体类,这样可以确保删除操作只会影响到 AddressInfoPO
类型的文档。如果指定的实体类与集合中的文档不匹配,则删除操作可能会出错。