mongodb中的数据需逐日统计每天的次数或金额,用dateToString转换

1,725 阅读1分钟
db.getCollection('').aggregate([
{
    $match: {
        "dateTime":{$gt: ISODate("2019-10-01T00:00:00Z")}
        }
},
{
    $project: {
        code: "$code",
        time: { $dateToString: { format: "%Y-%m-%d", date: "$dateTime" } }
        }
},
 { 
     $group: {
     _id: 
     {"code":"$code",
       "time":  "$time"}, 
     count: { $sum: 1 }
     }
},
{ 
        $project: { 
            count: 1, 
            _id: 0,
            "code":"$_id.code",
            "time":"$_id.time"
        } 
  }
 

])

SpringData Mongo实现

Aggregation recordAggregation = Aggregation.newAggregation(
                Aggregation.match(Criteria.where("dateTime").gt(getOneMonthBeforeDate()),
                Aggregation.project("code", "dateTime")
                        .and(DateOperators.DateToString.dateOf("dateTime").toString("%Y-%m-%d").withTimezone(DateOperators.Timezone.valueOf("Asia/Shanghai"))).as("DateTime"),
                Aggregation.group("code", "dateTime").count().as("count")
        );