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

以下の出力形式に従って、1 時間ごとの列の情報を 8 時間 {合計 8 時間} と月ごとにグループ化するクエリを作成しようとしています。

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

6 月の出力が定義されています{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);

// 今 $group 操作 *

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

*

// 集計を実行

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

ロジックはほぼ完了しましたが、$add コマンドの唯一の問題です。mongo-java 実装で「$add :["$count" , "$count1"]」を定義する方法。Java 実装では、$add コマンドで複数の値を指定できません。誰かがこれを完了する方法を教えてもらえますか?

4

2 に答える 2

0

mongo-java 実装で「$add :["$count" , "$count1"]」を定義する方法

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

クエリで数値を指定しない限り、これは正常に機能します...

于 2013-09-18T18:55:38.047 に答える