在mongodb-async-driver中按小时聚合

时间:2014-11-25 14:01:40

标签: java mongodb asynchronous driver

如何在mongodb-async-driver(http://www.allanbank.com/mongodb-async-driver/usage.html)中按小时聚合

我的收藏中有一个ISODate-Field。

[
  { name = "a", date = ISODate(...)},
  { name = "b", date = ISODate(...)},
  ...
] 

我想显示每小时文档可能出现的图表。 在MongoDB-Console中。我会做这样的事情:

db.mycollection.aggregate([{$group : {_id : {day:{ $hour : "$date"}}, count: { $sum: 1 }}}])

但是我被卡在驱动程序api:

 import static com.allanbank.mongodb.builder.AggregationGroupField.set;
 import static com.allanbank.mongodb.builder.AggregationGroupId.id;

 Aggregate.Builder builder = new Aggregate.Builder();
 builder.group(id().add(???), set("pop").sum("pop"))

1 个答案:

答案 0 :(得分:2)

您需要使用Expressions课程。使用以groupBuilder数组作为输入的AggregationGroupField方法。

public Aggregate.Builder group(AggregationGroupId.Builder id,
                      AggregationGroupField... aggregations)

构建hour表达式并将其作为id传递。

    Builder hour = new Builder();
    hour.add(Expressions.set("day",Expressions.hour(Expressions.field("date"))));
    Aggregate.Builder builder = Aggregate.builder();
    builder.group(
       hour,
       AggregationGroupField.set("pop").sum("pop")
      );
    MongoIterator<Document> result = col.aggregate(builder);
    while(result.hasNext())
    {
        System.out.println(result.next());
    };