tp3.2操作mongo SUM数据的实例(aggregate 不分组获取统计值)

参考文档 :  http://php.net/manual/zh/mongocollection.aggregate.php

tinkphp field没有封装关于mogno的sum用法 ;

所以只能借助与原生的mongoCollection::aggregate();

备注:

如果不分组获取统计值,那么只是需要将  _id的数值白变成null


public function statCallLog($where)
  {
      $pipeline = [
                 ['$match' => $where],
                 ['$group' => [
                     '_id' => '$cid',
                     '新字段名' => [
                         '$sum' => '$统计的字段的名字'
                     ],
                 ]]
             ];
      $stat_data = $this
          ->getCollection()
          ->aggregate($pipeline);
      return $stat_data;
  }

MongoTemplate 是Spring Data MongoDB库中的一个工具类,它提供了一种方便的方式来操作MongoDB数据库。如果你想根据时间对数据进行分组,并获取每个时间段的第一条记录,可以使用聚合框架Aggregation Pipeline。首先,你需要创建一个查询,包括`$match`阶段筛选出需要的时间范围内的数据,然后使用`$group`阶段按时间分组,并使用`$first`操作符选择每分钟的第一个文档。 以下是一个简单的示例代码: ```java import org.springframework.data.mongodb.core.MongoOperations; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; public List<Document> getMinuteData(MongoOperations mongoOps, String collectionName, Date startDate, Date endDate) { // 创建一个匹配条件,筛选出日期在给定范围内的文档 Criteria matchCriteria = Criteria.where("dateField") .gte(startDate) .lte(endDate); // 定义聚合管道 AggregationOperation[] pipeline = { Aggregation.match(matchCriteria), Aggregation.group("$date", new Document("_id", "$date")), Aggregation.sort(new Document("_id", 1)), // 按日期升序排序 Aggregation.limit(1) // 取每组的第一个元素 }; Query query = new Query(); query.addAggregation(pipeline); return mongoOps.aggregate(query, collectionName, Document.class); } ``` 在这个例子中,`dateField`应替换为你实际的时间字段名。这个方法返回的是一个包含每分钟第一条数据的Document列表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值