2014-11-25 51 views
3

我如何在MongoDB中,異步驅動器(http://www.allanbank.com/mongodb-async-driver/usage.html集料的小時在MongoDB中,異步驅動

聚集通過小時我有一個ISODate場在我的收藏。

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

回答

2

你需要利用Expressions類。使用採用BuilderAggregationGroupField數組作爲輸入的group方法。

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