MongoDB详细讲解 + springboot集成

MongoDB

以JSON为数据模型的文档非关系型数据库

垂直扩展

在一个机器上进行性能扩展

水平扩展

多个机器的扩展

定位特点

定位为应用数据库,

存储数据特点:量大/非敏感/一定的查询性能

MongoDB的语法是JavaScript

语法

添加

db.集合名.insert(js对象)

编辑

db.集合名.updateMany(

<query>{key:value}

<update>{$set:{key:value}}

)

删除

db.集合名.deleteMany(

<query>{key:value}

)

查询

db.集合名.find(

query{key:value}

projection{key:value}(除了_id以外,其他属性,要么全是1,要么全是0)

)

排序

1:正序 2:倒序

sort({列1 : 1})

分页

db.集合.find({}).skip(n).limit(m)

每页显示m条

显示第n条数据开始

比较运算符

语法 ->db.集合名. find( { 字段: {比较操作符: 值, ...} } )

>大于 - $gt greate than < 小于 - $lt less = 大于等于 - $gte equals <= 小于等于 - $lte != 不等 - $ne

is null {$exists: false} in {$in: [xx, xx ...]}

逻辑运算符

语法 -> find( {逻辑操作符: [条件1, 条件2, ...]} ) && 与 - $and || 或 - $or ! 非 - $not

模糊查询

db.集合.find( { 列: {$regex: /关键字/} } ) //sql: select * from user where name like '%关键字%'

db.集合.find({列: {$regex: /关键字/}}) / / 表示正则对象(js) db.集合.find({列: {$regex: "关键字"}})

{name:/xxx/} --->%xxx% {name:/^xxx/} --->xxx% {name:/xxx$/} --->%xxx {name:/xxx/i} 忽略大小写

集成springboot

依赖

 <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.3</version>
        <relativePath/>
    </parent>
​
​
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>    
    
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
​
    <!--spring boot data mongodb-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency>
</dependencies>
​
​

配置

# application.properties
# 配置数据库连接
#格式: mongodb://账号:密码@ip:端口/数据库?认证数据库
#spring.data.mongodb.uri=mongodb://root:admin@localhost/mongodemo?authSource=admin
spring.data.mongodb.uri=mongodb://localhost/mongodemo
​
# 配置MongoTemplate的执行日志
logging.level.org.springframework.data.mongodb.core=debug

domain

​
@AllArgsConstructor
@NoArgsConstructor
@Setter
@Getter
@ToString
@Document("users") //设置文档所在的集合
public class User {
    //文档的id使用ObjectId类型来封装,并且贴上@Id注解,
    // 自动映射为_id 自动封装ObjectId
    @Id
    private String id;
    private String name;
    private Integer age;
    private List<String> hobby = new ArrayList<>();
}

持久层

自定义持久层操作接口;

1>自定义接口继承MongoRepository接口

2>明确指定2个泛型:

1:当前接口操作实体类:User

2:当前接口操作实体类主键的类型: id---String

业务层

类似mybatis

MongoDB必须是复制集模式才可以使用事务,否则报错

@Service
public class UserServiceImpl  implements IUserService{
​
    @Autowired
    private UserRepository userRepository;
​
    @Override
    public void save(User user) {
        userRepository.save(user);
    }
​
    @Override
    public void delete(String id) {
        userRepository.deleteById(id);
    }
​
    @Override
    public void update(User user) {
        userRepository.save(user);
    }
​
    @Override
    public User get(String id) {
        return userRepository.findById(id).get();
    }
​
    @Override
    public List<User> list() {
        return userRepository.findAll();
    }
}

分页查询

    @Autowired
    private MongoTemplate mongoTemplate;
​
    // 分页查询文档,显示第2页,每页显示3个,按照id升序排列
    @Test
    public void testQuery1() throws Exception {
        // 创建查询对象
        Query query = new Query();
        // 设置分页信息
        query.skip(3).limit(3);
        // 设置排序规则
  query.with(Sort.by(Sort.Direction.ASC,"id"));
        List<User> list = mongoTemplate.find(query, User.class, "users");      list.forEach(System.err::println);
    }
​

高级查询

使用MongoTemplate

   @Test
    public void testQuery2() throws Exception {
        // 构建限制条件 {"name": "dafei"}
        Criteria criteria = Criteria.where("name").is("dafei");
        // 创建查询对象
        Query query = new Query();
        // 添加限制条件
        query.addCriteria(criteria);
​
        List<User> list = mongoTemplate.find(query, User.class, "users");
        list.forEach(System.err::println);
    }

JPA查询规范

前缀+ 操作符 + 属性名/列名

前缀: find / query

操作符: by and or lessThan

属性名/列名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值