以下是示例文檔結構。
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實現提到多個值。有人可以建議我如何完成這個?
您的本地命令中的「項目」與Java實現中的「項目」不匹配 - 在您使用的Java中「hourly_ 0「作爲字段,本地版本中的」計數「。你在「組」中有類似的問題。哪個準確地代表你的代碼? – Trisha