具有多个字段的mongodb Java驱动程序$group
我的目标是使用聚合框架创建一个管道来对数据进行分组,然后将此管道与java驱动程序一起使用。 MongoDB v4。0.3
我使用MongoDB Compass创建了以下管道(简化为重要部分):
[{
$group: {
_id: {
year: '$year',
month: '$month',
day: '$day',
prodName: '$prodName',
actionName: '$actionName'
},
actionCount: {
$sum: 1
}
}
}
]
这产生了以下(生成的)Java代码:
collectionName.aggregate(
Arrays.asList(
group(and(eq("year", "$year"),
eq("month", "$month"),
eq("day", "$day"),
eq("prodName", "$prodName"),
eq("actionName", "$actionName")),
sum("actionCount", 1))
);
集合中$group
阶段之前的数据如下所示:
{
year: 2020,
month: 01,
day: 01,
prodName: "productXY",
actionName: "actionXY"
}
$group
阶段应返回以下数据结构:
{
_id: {
year: 2020,
month: 01,
day: 01,
prodName: "productXY",
actionName: "actionXY"
},
actionCount: 50
}
问题
Mongo Compass按预期预览了阶段的结果,但是使用java驱动程序的阶段的结果非常不同。
它只返回1个文档(而不是预期的20个),并且只返回字段actionCount
问题
如何更改java代码以创建所需的管道阶段
# 1 楼答案
我找到了解决办法。 我需要将
and
运算符更改为Projections.fields
运算符。 我还是不知道为什么。也许其他人可以详细说明一下因此,工作查询如下所示: