美文网首页
基于Spring boot MongoDB常用查询操作

基于Spring boot MongoDB常用查询操作

作者: 离别刀 | 来源:发表于2018-06-05 10:28 被阅读0次
    0608153050.png

    基本概念

    mongo db是非关系型数据库的一种,性能高,容易部署,单表可达千万级别,业界流行一句话,百万级别用Mysql,千万级别用mongo;mongo介于关系型数据库和大数据库(如hadoop)之间,它既有关系行数据据库良好的查询功能,又有大数据库海量的存储。它是基于json的一种扩展数据结构BSON作为存储结构。

    BSON:bson对json的一大改进就是,它会将json的每一个元素的长度存在元素的头部,这样你只需要读取到元素长度就能直接seek到指定的点上进行读取。bson在json基础上增加了“byte array”数据类型,使得二进制的存储不再需要先base64转换后再存成json,减少了计算开销。json是按照字符串存储,bson是按结构存储的(像数组 )。

    mongo是一种文档型存储,集合中每条记录代表了一个文档,每一个文档都有唯一的一个"_Id"相当于Mysql中的主键;多个文档的的分组构成一个collection;mongo还只是javascript脚本语言,使得mongo的查询非常丰富灵活。

    本文基于mongo3.4.6版本测试通过
    1.查询多个对象

    查询中国大于17岁以上的人
    import static org.springframework.data.mongodb.core.query.Criteria.where;
    import static org.springframework.data.mongodb.core.query.Query.query;
    
    Query query= query(where("area").is("china").and("age").gte(17));
    List<Person> ret= mongoOperations.find(query,Person.class);
    或者List<Person> ret= mongoOperations.find(query,Person .class,"collectionName")
    

    2.查询单个对象

    查询身份证为612650199201121156的人
    import org.springframework.data.mongodb.core.query.Criteria;
    import org.springframework.data.mongodb.core.query.Query;
    import static org.springframework.data.mongodb.core.query.Criteria.where;
    
    Criteria criteria= where("idCard").is("612650199201121156");
    Query query = new Query(criteria);
    Person p= mongoOperations.findOne(query,Person.class);
    

    3.分页排序查询

    //import 省略
    int offset=0;
    int limit=20;
    Criteria criteria= where("area").is("china").and("age").gte(17);
    Query query = new Query(criteria);
    query.with(new Sort(new Sort.Order(Sort.Direction.ASC, "area"),new Sort.Order(Sort.Direction.ASC, "age")));
    query.skip(offset).limit(limit);
    List<Person> ret= mongoOperations.find(query,Person.class)
    

    4.统计记录数count

    //import 省略
    Criteria cri = Criteria.where("area").is("china").and("age").gte(17);
    Query query = Query.query(cri);
    long count = mongoOperations.count(query, "collectionName");
    或者long count = mongoOperations.count(query, Person.class);
    

    5.数据聚合分组

    求平均:
    求中国人的平均年龄
     Criteria criteriaDefinition = Criteria.where("age").gt(0).and("area").is("china");
     Aggregation aggregation = Aggregation.newAggregation(Aggregation.match(criteriaDefinition), Aggregation.group("userId").avg("age").as("avgAge"));
    AggregationResults<DBObject> aggregate = mongoOperations.aggregate(aggregation, collectionName, DBObject.class);
    List<DBObject> mappedResults = aggregate.getMappedResults();
    double avgAge= (double)mappedResults.get("avgAge");
    
    求sum:Aggregation.group("userId").sum("age");
    求count:Aggregation.group("area").count();
    

    mongo在spring boot中的配置

    在application.properties中配置:
    mongodb.uri= mongodb://message:123456@127.0.0.1:27017/message
    
    @Configuration
    public class MongoConfig {
        @Value("${mongodb.uri}")
        private String mongoURI;
        @Bean
        public MongoDbFactory mongoDbFactory() throws UnknownHostException {
            MongoClientURI mongoClientURI= new MongoClientURI(mongoURI);
            return new SimpleMongoDbFactory(mongoClientURI);
        }
    }
    

    windows下mongo数据导入脚本:
    mongorestore -h 127.0.0.1:27017 -d db1 D:\server\mongodb\hunan_dbdata\mongodb_201805031610\201805031610\mongodump\db2

    相关文章

      网友评论

          本文标题:基于Spring boot MongoDB常用查询操作

          本文链接:https://www.haomeiwen.com/subject/hrzusftx.html