MongoTemplate操作mongodb

  mongo的概念就不介绍了,可以参考:http://www.runoob.com/mongodb/mongodb-tutorial.html

  本文基于springboot项目。

  1、连接配置,使用自动配置方式,在applicaiton.properties中配置连接信息即可

spring.data.mongodb.host=127.0.0.1
spring.data.mongodb.port=27017
spring.data.mongodb.database=mongdbname

  2、java中使用

  注入mongoTemplate对象 

    @Autowired
    private MongoTemplate mongoTemplate;    

  Criteria类:它封装所有的语句,以方法的形式进行查询。

  Query类:这是将语句进行封装或者添加排序之类的操作。

 mongo查询语句:db.vaabs_monthly.find({"areaCode":/.*0000$/})

  java代码:

  Pattern queryPattern = Pattern.compile(".*0000$", Pattern.CASE_INSENSITIVE);
  Criteria criAreaCode = new Criteria();
  criAreaCode.andOperator(Criteria.where("areaCode").regex(queryPattern));
  Query queryAreaCode = new Query(criAreaCode);

  

例子:其中mongo语句和java中操作不完全相同,java中主要是为了使用索引,查询两次,效果是一样的。
  public List<Vaabs_monthly> getRankCountryApi() {
        //db.vaabs_monthly.find({"$and":[{"indusId":300},{"areaCode":/.*0000$/}]}).sort({"date":-1,"value":-1}).limit(31)
        List<ValueData> dataList = new ArrayList<ValueData>();
        Pattern queryPattern = Pattern.compile(".*0000$", Pattern.CASE_INSENSITIVE);
        Criteria criAreaCode = new Criteria();
        criAreaCode.andOperator(Criteria.where("areaCode").regex(queryPattern));
        Query queryAreaCode = new Query(criAreaCode);
        List<AreaCodeMapping> provinceAreaCodes = mongoTemplate.find(queryAreaCode, AreaCodeMapping.class);//获取所有省areaCode
        List<String> areaCodes = new ArrayList<String>();
        for(AreaCodeMapping areaCodeMapping:provinceAreaCodes){
            areaCodes.add(areaCodeMapping.getAreaCode());
        }
        Criteria criteria = new Criteria();
        criteria.andOperator(
                Criteria.where("indusId").is(300),
                Criteria.where("areaCode").in(areaCodes));
        Query query = new Query(criteria);
        query.with(new Sort(new Order(Direction.DESC,"date"),new Order(Direction.DESC, "value")));
        query.limit(31);
        List<Vaabs_monthly> resultRankAbs = mongoTemplate.find(query, Vaabs_monthly.class);
        return resultRankAbs;
    }

 

posted @ 2018-01-10 17:23  风茂angel  阅读(40379)  评论(1编辑  收藏  举报