mongodb复杂聚合统计
db.test_domo.aggregate([
{
$match:{
createTime:{$gte:"2020-02-20"}
}
},
{
$group: {
_id: {
userId: "$userId",
dateTime: "$dateTime",
code: "$code"
},
count_01: {
"$sum": "$count_01"
},
count_02: {
"$sum": "$count_02"
}
}
}, {
$project: {
_id: 0,
userId: "$_id.userId",
dateTime: "$_id.dateTime",
code: "$_id.code",
count_01: 1,
count_02: 1
}
},{
$sort:{
code: -1,
dateTime: -1
}
}])
java示例(示例参数与上述语句参数不同,但是实现类似)
List<BasicDBObject> basicDBObjectList = new ArrayList<>();
BasicDBObject $match = new BasicDBObject();
$match.put("$match", new BasicDBObject().append("hourTime", new BasicDBObject().append("$gte", startTime).append("$lte",endTime)));
basicDBObjectList.add($match);
BasicDBObject $group = new BasicDBObject();
$group.put("$group", new BasicDBObject().append("_id", "$hourTime").append("num_tutorial", new BasicDBObject("$sum", "$opTotal")));
basicDBObjectList.add($group);
BasicDBObject $project = new BasicDBObject();
$project.put("$project", new BasicDBObject().append("_id", false).append("hourTime", "$_id").append("opTotal", "$num_tutorial"));
basicDBObjectList.add($project);
BasicDBObject $sort = new BasicDBObject();
$sort.put("$sort", new BasicDBObject().append("hourTime", 1));
basicDBObjectList.add($sort);
AggregateIterable<Document> documentAggregateIterable = mongoTemplate.getCollection(COLLECTION_NAME).aggregate(basicDBObjectList);