【发布时间】:2020-09-25 05:36:23
【问题描述】:
我的目标是使用聚合框架创建一个管道来对我的数据进行分组,然后将此管道与 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 代码以创建所需的管道阶段?
【问题讨论】:
-
Compass 为聚合的 group 阶段生成的 Java 代码看起来正确 - 没有问题。
标签: java mongodb mongodb-java