如何在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"))
答案 0 :(得分:2)
您需要使用Expressions课程。使用以group
和Builder
数组作为输入的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());
};