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