我有以下数据:
{groupId: 1, name: Jon},
{groupId: 1, name: Dan},
{groupId: 2, name: Jon},
{groupId: 2, name: Ris},
{groupId: 3, name: David}
我收到一个groupID数组作为输入,我想计算这些组的DISTICT名称总数,我定义了聚合代码如下:
groupIds [] = {1,2}
Aggregation agg = newAggregation(
match(Criteria.where("groupId").in((groupIds)),
group("name").count().as("total")
);
但我得到一个groupResult,其中包含每个名称的计数,即:
{name : Jon, total : 2}
{name : Dan, total : 1}
{name: Ris, total : 1}
虽然我实际上想得到总数= = strong> 3 (实际上是上述groupResult的大小)
如何调整聚合以实现这一目标?
谢谢!
P.S。大卫被忽略了 - 正如预期的那样
答案 0 :(得分:1)
要获取最后一个组的大小,您可以引入另一个最终 $group
管道阶段,您可以按键使用null
组对所有文档进行分组,然后计算累计和。
在mongo shell中,这将转换为
db.collection.aggregate([
{ "$match": { "groupId": { "$in": [1, 2] } } },
{
"$group": {
"_id": "$name"
}
},
{
"$group": {
"_id": null,
"total": { "$sum": 1 }
}
}
])
使用Spring Data,应该遵循:
Aggregation agg = newAggregation(
match(Criteria.where("groupId").in((groupIds)),
group("name"),
group().count().as("total")
);