简单记录用spring data 操作mongodb查询的使用

第一种方法:用DB对象创建查询条件,mongoTemplate调用

@Override
    public Map<String, Object> getGoodsByCondition(int pageNumber, int pageSize, String title, String country, String sortType, String startDate, String endDate) {
        PageRequest pageRequest = super.getPageRequest(pageNumber, pageSize, sortType);
        List<Goods> list;
        Long total;
        if (StringUtils.isEmpty(title) && StringUtils.isEmpty(country) && StringUtils.isEmpty(startDate) && StringUtils.isEmpty(endDate)) {
            list = this.getForPageList(pageNumber, pageSize, sortType);
            total = goodsRepos.count();//总数
        } else {
            BasicDBList basicDBList = new BasicDBList();
            if (StringUtils.isNotEmpty(title)) {
                //模糊查询
                Pattern pattern = Pattern.compile("^.*" + title + ".*$", Pattern.CASE_INSENSITIVE);
                basicDBList.add(new BasicDBObject("name", pattern));
            }
            if (StringUtils.isNotEmpty(country)) {//等值查询
                basicDBList.add(new BasicDBObject("country", country));
            }
            if (StringUtils.isNotEmpty(startDate)) {//大于等于
                basicDBList.add(new BasicDBObject("insert_date", new BasicDBObject("$gte", startDate)));
            }
            if (StringUtils.isNotEmpty(endDate)) {//小于等于
                basicDBList.add(new BasicDBObject("insert_date", new BasicDBObject("$lte", endDate)));
            }
            DBObject obj = new BasicDBObject();
            obj.put("$and", basicDBList);//拼接条件
            Query query = new BasicQuery(obj);
            list = mongoTemplate.find(query.with(pageRequest), Goods.class);//结果集
            total = mongoTemplate.count(query.with(pageRequest), Goods.class);//总数
        }
        Map resultMap = new HashMap();
        resultMap.put("list", list);
        resultMap.put("total", total);
        return resultMap;
    }
@Override
    public PageRequest getPageRequest(int pageNumber, int pageSize, String sortType) {
        //处理排序
        Sort sort;
        if (sortType == null || "".equals(sortType)) {
            sort = new Sort(Sort.Direction.DESC, "insertDate");
        } else {
            sort = new Sort(Sort.Direction.DESC, sortType);
        }
        return new PageRequest(pageNumber-1, pageSize, sort);
    }

第二种方法:用Query和Criteria对象创建查询条件,mongoTemplate调用

        int pageNo = condition.getPageNo();
        int pageSize = condition.getPageSize();        
        // 创建查询对象
        Query query = new Query();
        Criteria criteria = new Criteria();
        // 等值查询
        if (StringUtils.isNotBlank(condition.getAccount())) {
            criteria.and("liveId").is(condition.getLiveId());
        }
        // 模糊查询
        if (StringUtils.isNotBlank(condition.getName())) {
            Pattern pattern = Pattern.compile("^.*" + condition.getName()
                    + ".*$", Pattern.CASE_INSENSITIVE);
            criteria.and("name").regex(pattern);
        }
        if (null != condition.getStartTime() && null !=             condition.getEndTime()) {
            criteria.and("time").gte(condition.getStartTime()).lte(condition.getEndTime());
        } else if (null != condition.getStartTime()) {
            //开始时间
            criteria.and("time").gte(condition.getStartTime());
        } else if (null != condition.getEndTime()) {
            //结束时间
            criteria.and("time").lte(condition.getEndTime());
        }
        query.addCriteria(criteria);
        query.with(new Sort(Sort.Direction.DESC, "time"));
        // 设置起始数
        query.skip((pageNo - 1) * pageSize);
        // 设置查询条数
        query.limit(pageSize);
List<Test> list = mongoTemplate.find(query, Test.class);

第三种方式:继承MongoRepository,方法名用条件的表达式的方式命名(适合条件简单一些的)

public interface GoodsRepos extends MongoRepository<Goods, String> {

    Goods getByGoodsId(String goodsId);
    Page<Goods> getByNameLikeAndCity(String name,String country, Pageable pageable);
    Long countByNameLike(String name);
}

相关文档:https://docs.spring.io/spring-data/mongodb/docs/2.1.2.RELEASE/reference/html/#mongodb-template-query

shell 命令:https://docs.mongodb.com/manual/crud/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值