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"})

 

 

 

 

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

转载于:https://www.cnblogs.com/theRhyme/p/10251105.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值