我正在尝试使用mongo morphia并在Java中执行 group 操作。
这是我在我的代码中调用的api:
org.mongodb.morphia.aggregation.AggregationPipeline.group(String id, 小组......分组)
以下是我传入指定api的内容:
org.mongodb.morphia.aggregation.Group.grouping(String name,String sourceField)
AggregationPipeline pipeline = this.dao.getDatastore()
.createAggregation(Myclass.class)
.match(query
.filter("createTime >=", GroupUtil.fromISODate(beginDate + DATE_SUFFIX).getTime())
.filter("createTime <=", GroupUtil.fromISODate(endDate + DATE_SUFFIX).getTime()))
.sort(Sort.ascending("vendor"))
.group(
"vendor",
grouping("_id","vendor"),
grouping("count", new Accumulator("$sum", 1)));
一旦我运行上面的代码块,我就得到了一个 NullPointerException ,
问题是因为我通过传递String sourcefield
初始化了第一个分组和小组阶段使用累加器处理此组
如果使用String传入,则不存在。
所以得出结论,我认为有一个错误,用户在选择使用它之前甚至无法实现。
有人可以指导我完成这项工作,并提前提供一些有用的信息。
以下是morphia的源代码:
@Override
public AggregationPipeline group(final String id, final Group... groupings) {
DBObject group = new BasicDBObject("_id", "$" + id);
for (Group grouping : groupings) {
Accumulator accumulator = grouping.getAccumulator();
group.put(grouping.getName(), new BasicDBObject(accumulator.getOperation(), accumulator.getField()));
}
stages.add(new BasicDBObject("$group", group));
return this;
}