2013-06-27 93 views
0

以下是示例文檔結構。

db.volume_statistics.insert({ "client": "SER", 
           "message": "Sample_v02RQ", 
           "GDS": "SABRE", 
           "daily": 240000, 
           "hourly": {"0": 1000, "1": 100, "2": 454, "3":3434, "4":3434, "5":343, ... , 」23」:454 }, 
           "date":ISODate("2013-06-23T04:00:00Z") }); 

我試圖查詢寫入組每小時列的8小時{的全部8時之}和月信息按以下格式輸出。

{ "Month" : 5 , "01-08" : 26970, "09-17" : 45970} 
{ "Month" : 6 , "01-08" : 269712, "09-17" : 56970} 

的輸出定義爲月月{6},它得到了01-08小時內269712個請求和09-17小時56970個請求。

我寫了下面的本地命令和Java代碼來執行此操作。

本地命令::

db.volume_statistics.aggregate({ $match: { date: { $gt: ISODate("2011-01-01T00:00:00Z") } } }, 
           { $group : { _id: { month: { $month: "$date" } }, count: { $sum: "$hourly.0" }, count1: { $sum: "$hourly.1" } } }, 
           { $project: { _id: 1, count : 1 , count1 : 1 , "01-08" :{ $add:["$count", "$count1"]} } }); 

Java實現::

DBObject match = new BasicDBObject("$match", new BasicDBObject("date",new BasicDBObject("$gt",fromDate))); 

DBObject fields = new BasicDBObject("_id", 1); 
      fields.put("hourly_0", 1); 
      fields.put("hourly_1", 1); 
      fields.put("01-08", new BasicDBObject("$add","$hourly_0")); 
DBObject project = new BasicDBObject("$project", fields); 

//現在$組操作 *

DBObject groupFields = new BasicDBObject("_id", new BasicDBObject("$month","$date")); 
groupFields.put("hourly_0", new BasicDBObject("$sum", "$hourly.0")); 
groupFields.put("hourly_1", new BasicDBObject("$sum", "$hourly.1")); 
DBObject group = new BasicDBObject("$group", groupFields); 

*

//るn聚合

AggregationOutput output = table.aggregate(match,group,project); 

幾乎我已經完成了邏輯,但與$ add命令的唯一問題。如何用mongo-java實現定義「$ add:[」$ count「,」$ count1「]。 我cld不能在$ add命令中用java實現提到多個值。有人可以建議我如何完成這個?

+0

您的本地命令中的「項目」與Java實現中的「項目」不匹配 - 在您使用的Java中「hourly_ 0「作爲字段,本地版本中的」計數「。你在「組」中有類似的問題。哪個準確地代表你的代碼? – Trisha

回答

1

使用BasicDBList來表示Java中的數組。 您的代碼將類似於此:

DBObject fields = new BasicDBObject("_id", 1); 
     fields.put("hourly_0", 1); 
     fields.put("hourly_1", 1); 

     BasicDBList dbList = new BasicDBList(); 
     dbList.add("$hourly_0"); 
     dbList.add("$hourly_1"); 
     fields.put("01-08", new BasicDBObject("$add",dbList)); 

    DBObject project = new BasicDBObject("$project", fields); 
0

如何界定「$添加: 「$伯爵」, 「$ COUNT1」]」與蒙戈的Java 實施

String [] srt_array = {"$count", "$count1"}; 
BasicDBObject add_obj = BasicDBObject ("$add", srt_array); 

這項工作很好,除非,you want to supply a numeric value in the query ...