mongo数据库

本文介绍了MongoDB的基本概念,包括其作为非关系型数据库的特点、BSON格式,以及MongoDB支持的数据类型。详细讲解了MongoDB的术语差异、如何通过SpringDataMongoDB进行数据操作,如查询、插入、更新和删除,以及实体类映射和MongoTemplate的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.什么是mongo?

mongo是一个文档数据库,是一种非关系型数据库,采用BSON存储文档数据,BSON是一种类json的一种二进制形式的存储格式,相对于json多了date类型和二进制数据。

2.mongo支持的数据类型?

String 、Integer 、Double 、Boolean 、Object、Arrays、Datetime、Code、Regular Expression(正则表达式)等。

3.mongo的术语

SQL术语/概念MongoDB术语/概念解释/说明
databasedatabase数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfield数据字段/域
indexindex索引
table joins表连接,MongoDB不支持
primary keyprimary 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 的文档,具体来说,它执行以下步骤:

  1. 创建一个 Query 对象,查询条件为 _id 等于指定的 addressId

  2. 创建一个 Update 对象,用于设置要修改的字段值。

  3. 调用 studentInfoMapperfindStudentIdByAddressId() 方法,根据 addressId 查找对应的学生 ID。

  4. 使用 Update 对象的 set() 方法,将 studentId 字段设置为查询到的学生 ID。

  5. 调用 mongoTemplateupdateFirst() 方法,将 queryupdateAddressInfoPO.class 传递给该方法,以执行实际的更新操作。

  6. 返回类型为 UpdateResult,表示更新操作的结果。

需要注意的是,这段代码中的 AddressInfoPO.class 参数指定了要更新的集合的映射实体类,这样可以确保更新操作只会影响到 AddressInfoPO 类型的文档。如果指定的实体类与集合中的文档不匹配,则更新操作可能会出错。

另外,updateFirst() 方法是一个通用的更新方法,它可以处理多种更新操作,例如设置字段值、增加字段值、删除字段值等。具体的更新操作可以通过 Update 对象的不同方法来实现,例如 set()inc()unset() 等。

5.删除

Query query = new Query(Criteria.where("_id").is(addressId));
 mongoTemplate.remove(query, AddressInfoPO.class);

  1. 创建一个 Query 对象,查询条件为 _id 等于指定的 addressId

  2. 调用 mongoTemplateremove() 方法,将 queryAddressInfoPO.class 传递给该方法,以执行实际的删除操作。

需要注意的是,这段代码中的 AddressInfoPO.class 参数指定了要删除的集合的映射实体类,这样可以确保删除操作只会影响到 AddressInfoPO 类型的文档。如果指定的实体类与集合中的文档不匹配,则删除操作可能会出错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值