mongodb分页,模糊,时间,条件,查询

1.添加maven依赖

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>

2.接口继承mongo的api仓库(MongoRepository)进行增删改查,和springDataJpa差不多

public interface StudentRepository extends MongoRepository<Student, ObjectId>
{

}

3.分页,模糊查询,时间查询

            int pageNum = studentRequest.getPageNum();
            int pageSize = studentRequest.getPageSize();
            if (pageNum <= 0)
            {
                pageNum = 1;
            }
            pageNum = pageNum - 1;
            if (pageSize <= 0)
            {
                pageSize = 10;
            }
            Student student = new Student ();
            BeanUtils.copyProperties(studentRequest, student );
            //创建匹配器
            ExampleMatcher matcher = ExampleMatcher.matching()
                    .withMatcher("name", match -> match.contains().ignoreCase()) //根据名字模糊匹配
                    .withMatcher("age", match -> match.exact()) //根据年龄精确查询
                    .withIgnorePaths("pageNum", "pageSize", "Id", "address");//忽略基本类型
            //创建实例
            Example<Student > example = Example.of(Student , matcher);
            Query query = new Query(Criteria.byExample(example));
            if (studentRequest.getStartTime() != null && studentRequest.getEndTime() != null){
                query.addCriteria(Criteria.where("datetime")
                        .gte(studentRequest.getStartTime())
                        .lte(studentRequest.getEndTime()));
            }
            else
            {
                if (studentRequest.getStartTime() != null)
                {
                    query.addCriteria(Criteria.where("datetime").gte(studentRequest.getStartTime()));
                }
                if (studentRequest.getEndTime() != null)
                {
                    query.addCriteria(Criteria.where("datetime").lte(studentRequest.getEndTime()));
                }
            }

            Pageable pageable = PageRequest.of(pageNum, pageSize, Sort.Direction.DESC, "datetime");  //根据创建的时间降序
            //计算总数
            long total = mongoTemplate.count(query, Student .class);
            // Page<Student> page = studentRepository.findAll(example, pageable);
            //查询结果集
            List<Student> studentList= mongoTemplate.find(query.with(pageable), Student.class);
            Page<Student> page = new PageImpl(studentList, pageable, total);
            QueryResult queryResult = new QueryResult();
            queryResult.setTotalPage(page.getTotalPages());
            queryResult.setTotalCount(page.getTotalElements());
            queryResult.setList(page.getContent());
            return R.ok().put("data", queryResult);
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于 MongoDB 模糊查询并同时满足多个条件,可以使用正则表达式进行查询。在 MongoDB 中,可以使用 $regex 操作符来匹配符合正则表达式的字段值。 例如:假设我们有一个集合名为“users”,包含以下字段:name、username、email,现在我们想要匹配同时包含关键词“John”和“gmail”的 email。 可以使用以下代码进行查询:db.users.find({email: {$regex: ".*John.*", $options: "i"}, email: {$regex: ".*gmail.*", $options: "i"}}); 其中,$regex表示使用正则表达式查询,. 表示任何字符,* 表示零个或多个字符,$options 表示正则表达式选项,i 表示不区分大小写。 请注意,这里使用的是两个键值对 email 字段进行匹配。这是因为,在 MongoDB 中,一个字段不能重复定义,将覆盖之前的定义,而查询要求是同时满足两个条件。 此外,还可以使用 OR 操作符进行多条件查询。例如,查询 name 字段中包含“Kim”或 email 字段中包含“gmail”的记录,可以使用以下代码: db.users.find({$or: [{name: {$regex: ".*Kim.*", $options: "i"}}, {email: {$regex: ".*gmail.*", $options: "i"}}]}); 其中,$or 表示或操作符,将两个包含 name 和 email 字段的查询语句放在数组中,查询时会同时满足两个条件。 总之,在 MongoDB 中进行模糊查询并满足多个条件,可以使用正则表达式或 OR 操作符进行查询。将满足条件的键值对放在查询语句中,可以实现更为复杂的多条件查询
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值