2017-01-20 23 views
2

mongodb javaドライバを使用して集約関数でグループを書き込もうとしています。mongodb javaドライバ集約グループby

ここにデータベースのドキュメント構造を示します。

{ "_id" : ObjectId("58819bd9f16a7802523bc077"), "Date" : "12/19/2016", "Time" : "4:15:00", "Temperature" : 65.5, "User" : "A", "ThermalComfort" : -1, "settingID" : ObjectId("58819bd6f16a7802523bbdc5") } 
{ "_id" : ObjectId("58819bd9f16a7802523bc078"), "Date" : "12/19/2016", "Time" : "4:30:00", "Temperature" : 65.25, "User" : "A", "ThermalComfort" : -1, "settingID" : ObjectId("58819bd6f16a7802523bbdc5") } 

ThermalComfortのみを投影する「日付」と「時間」でグループ化したいと思います。私の予想される出力は、{date = 12/19/16、time = 0:00:00、listOfTC = [2,1]}です。 listOfTCはArr​​ayの各読み取り値からなるリストです(例:[-1、-1])

ここに私が書いたコードがあります。

AggregateIterable<Document> iterable = themalComfortProfileCollection.aggregate(Arrays.asList(
      new Document("$group", new Document("_id", "$Date" + "$Time").append("count", new Document("$sum", 1))), 
      new Document("$project", new Document("comfortIndex", "$ThermalComfort")))); 

ただし、ドキュメントを印刷すると、nullドキュメントが表示されます。

for (Document doc : iterable) { 
    System.out.println(doc); 
} 

Document{{_id=null}} 

どの部分が間違っているか説明できますか?

+0

$のグループステージのためにこれを試してください:新規ドキュメント「(.append( "_ ID"、新文書( "日付"、 "$日付")( "時間"、 "$時間")を追加します。) ( "$ sum"、1))) – felix

+0

「ThermalComfort」だけを投影するときに、なぜグループ分けしていますか?あなたの質問を予想される結果で更新してください。 – Veeram

+0

@felix、ありがとうございます!出来た。しかし、出力の問題が発生しました。私はこのように出力を印刷したいと思います。 {date = 12/19/16、time = 0:00:00、listOfTC = [2,1,3,4,5]}次に、コードをどのように変更すればよいですか? – ejshin1

答えて

2

最後に、このコードは私が望む結果を返しました。

AggregateIterable<Document> iterable = themalComfortProfileCollection.aggregate(Arrays.asList(
      new Document("$group", new Document("_id", new Document("date", "$Date").append("time", "$Time")).append("ThermalComfortList", new Document("$push", "$ThermalComfort"))), 
      new Document("$sort", new Document("_id", 1)))); 
関連する問題