Aggregation-聚合查詢
Aggregation:
引數說明:sql(Operators)
where ($match) 、group by ($group) 、having($match)、select($project)、order by($sort)、limit($limit)
sum($sum)、count($sum)、join($lookup)
MongoVUE操作:
|
|
統計頁面的PV、UV和獨立IP
{
$project:{子查詢--對日期進行處理、獲取所有cookId和ip
ord_day:{
year:{$year:"$createTime"},
month:{$month:"$createTime"},
day:{$dayOfMonth:"$createTime"},
},
cookId:"$cookId",
ip:"$ip"
}
},
{
$group:{處理子查詢的結果,對日期進行分組
_id:"$ord_day",
users:{$addToSet:"$cookId"},
ips:{$addToSet:"$ip"},
total:{$sum:1}
}
},
{
$project:{
_id:"$_id",
pv:"$total",
uv:{$size:"$users"},
ip:{$size:"$ips"}
}
}
JAVA程式碼實現:
Aggregation aggregation = Aggregation.newAggregation(
Aggregation.match(criteria),
Aggregation.project(fields),
Aggregation.group(fields),
Aggregation.sort(sort),
Aggregation.skip(elementsToSkip),
Aggregation.limit(maxElements)
);
mongoTemplate.aggregate(aggregation, collectionName, outputType)
例如:
Aggregation aggregation = Aggregation.newAggregation(
Aggregation.match(Criteria.where("status").is("A")),
Aggregation.group("cust_id").sum("price").as("total"),
Aggregation.match(Criteria.where("total").gt(250))
);
mongoTemplate.aggregate(aggregation, collectionName, outputType)
https://blog.csdn.net/forget_fg1/article/details/53524294?utm_source=copy