使用mongo / morphia处理聚合但得到NullPointerException

时间:2017-12-07 03:59:27

标签: java mongodb morphia

我正在尝试使用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;
}

0 个答案:

没有答案
相关问题