Aggregation:
参数说明:sql(Operators)
where ($match) 、group by ($group) 、having($match)、select($project)、order by($sort)、limit($limit)
sum($sum)、count($sum)、join($lookup)
MongoVUE操作:
SELECT cust_id,
SUM(price) as total
FROM orders
WHERE status = 'A'
GROUP BY cust_id
HAVING total > 250
|
db.orders.aggregate( [
{ $match: { status: 'A' } },
{
$group: {
_id: "$cust_id",
total: { $sum: "$price" }
}
},
{ $match: { total: { $gt: 250 } } }
] )
|
{
$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.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)
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)