【问题标题】:Aggregate by Hour in the mongodb-async-driver在 mongodb-async-driver 中按小时聚合
【发布时间】:2014-11-25 14:01:39
【问题描述】:

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

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

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

我想显示一个图表,说明每小时可能出现的文档数量。 在 MongoDB 控制台中。我会这样做:

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"))

【问题讨论】:

    标签: java mongodb asynchronous driver


    【解决方案1】:

    您需要使用Expressions 类。利用group 方法,该方法将BuilderAggregationGroupField 数组作为输入。

    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());
        };
    

    【讨论】:

      猜你喜欢
      • 2014-08-10
      • 1970-01-01
      • 2021-04-28
      • 2021-10-26
      • 2020-05-04
      • 2021-07-21
      • 2019-02-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多