zoukankan      html  css  js  c++  java
  • MongoDB常用查询,排序,group,SpringDataMongoDB update group

    MongoDB查询

    指定查询并排序

    db.getCollection('location').find({"site.id":"川A12345","site.ts":{$gte : ISODate("2018-11-30T16:00:00.000Z"), $lt :ISODate("2018-12-30T16:00:00.000Z")}}).sort({"site.ts":-1})
    

      

    返回指定字段

    db.getCollection('location').find({},{ "site.id" : 1}).pretty()
    

     

    db.getCollection('vehicle.abilities').find({},{"_id":0, "vid":1, "data_range":1})
    

    0表示的是不返回_id字段,1表示返回对应的字段vid,data_range。

     

    或运算($or)

    db.getCollection('people').find({$or : [{_id:ObjectId("5bae04f2ea403100054bfea4")},{_id:ObjectId("5bae028fea403100054bfea2")}]})
    

    查询id在指定数组结果($in

    db.getCollection('people').find({"_id" :{$in :[ObjectId("5c346a16adbe1d0005b1a290"),ObjectId("5c346a16adbe1d0005b1a291"),ObjectId("5c35a0c024aa9a00065425d6")]}})
    

      

    返回指定字段去重后记录数

    db.getCollection('user').distinct("name").length

    group查询语句:

    db.getCollection('collectionName').aggregate( 
    [ 
    { $match : { "labels.site_name" : "川A12345","start":{$gte : ISODate("2018-01-30T16:00:00.000Z"), $lte : ISODate("2018-12-31T16:00:00.000Z")}}}, 
    { $group : { _id : "$start", number :{ $sum : 1 }}},
    { $sort : { _id : -1 }}
    
    ] 
    )

    使用aggregate方法;

    $match是查询的方法;

    $group 分组字段相关;

    $sort 排序。

    匹配一个Document中的字段是数组属性其中的值:$elemMatch

    比如有如下记录:

    {_id: ObjectId("53d760721423030c7e14267d"),
    name: 'Tony',
    categories: [
        {
         name: 'coder',
         
        }
        {
         name: 'dotaer',
         
        }
        {
         name: 'cook',
         
        }
      ]
    }

    现在我想要匹配:name:tony和categories数组中name:dotaer的记录

    语句如下:

    find({"name":"Tony", "categories":{$elemMatch:{"name":"dotaer"})

     匹配记录中有个属性是字符串数组中其中一个字符串,有个属性如下

    "tags" : [ 
            "state", 
            "stat"
        ]

    查询语句如下:

    db.getCollection('va').find({tags:"stat"})

    强烈建议不要定义一个非对象的属性,如字符串数组,可以定义一个对象数组,对象中只有一个属性,字符串

    SpringDataMongoDB

    简单查询

     MongoTemplate template = factory.getMongoTemplate(DATABASE_NAME);
            Query query = query(where("name").is(name));
            People people = template.findOne(query, People.class,"people");
    

      

    update更新

    Update update = Update.update("更新字段名", 内容);
    
    template.updateFirst(query, update, entityClass, collectionName);
    

      

    group分组

         Criteria criteria = Criteria.where("start").gte(begin).ite(end).and("name").is(name);
            MatchOperation match = Aggregation.match(criteria);
    
            GroupOperation group  = Aggregation.group("start").count().as("count");
    
            // 注group key start会映射成_id,所以要利用project阶段映射回start
            ProjectionOperation project =  Aggregation.project("count").and("_id").as("start");
    
            Aggregation aggregation = Aggregation.newAggregation(match,group,project);
    
            AggregationResults<Map> aggregate = template.aggregate(aggregation, "表名", Map.class);
            List<Map> mappedResults = aggregate.getMappedResults();

    Criteria 是查询条件,构建对象MatchOperation ,ProjectionOperation ,Aggregation;
    template是查询的数据库。
    SpringDataMongoDB grouop更加详细的内容:https://blog.csdn.net/fs1360472174/article/details/74081487

  • 相关阅读:
    利用反射技术修改类中的字段(成员变量的反射)
    Java长存!12个Java长久占居主要地位的原因
    撰写架构设计文档的心得体会
    做个正能量的程序员
    程序员如何提高自己的编程水平
    mysql查询优化
    MySQL修改最大连接数,没有my.ini文件,只有my-default,这怎么改呀?
    PDO 拿出來的 Float 數據跟数据库中的数据不匹配
    大量多级分类数据的获取、缓存、搜索查询 怎么设计最快 ?
    windows下MySQL5.6以上版本,如何通过修改配置文件来修改数据库的最大连接数啊?
  • 原文地址:https://www.cnblogs.com/theRhyme/p/10251105.html
Copyright © 2011-2022 走看看