2017-01-02 13 views
0

MongoDB Aggregateフレームワークを使用してJSONレスポンスの平均気温と湿度を15分間隔で取得しようとしています。私はSyntaxError: invalid property id @(shell):2:0mongodb aggregate with time interval

を取得しています。これは、これは

[{ "_id" : ObjectId("585db63541472bf7683eb3c5"), "datetime" : ISODate("2016-12-23T23:41:41.897Z"), "temperature" : 19, "humidity" : 23 } 
{ "_id" : ObjectId("585db63a41472bf7683eb3c6"), "datetime" : ISODate("2016-12-23T23:41:46.927Z"), "temperature" : 19, "humidity" : 23 } 
{ "_id" : ObjectId("585db63f41472bf7683eb3c7"), "datetime" : ISODate("2016-12-23T23:41:51.956Z"), "temperature" : 19, "humidity" : 23 } 
{ "_id" : ObjectId("585db644483ab4f778a635bf"), "datetime" : ISODate("2016-12-23T23:41:56.991Z"), "temperature" : 19, "humidity" : 23 } 
{ "_id" : ObjectId("585db64a483ab4f778a635c0"), "datetime" : ISODate("2016-12-23T23:42:02.032Z"), "temperature" : 19, "humidity" : 23 }] 

私のJSONレスポンスである

var datetime = new Date(); 
var interValue = 15*1000*60; 
datetime.setHours(datetime.getHours() - 1 + interValue); 
var endtime = new Date(); 
db.sensordata.aggregate([ 
{ $match : { datetime : { $gte : datetime, $lt: endtime } } }, 
{ 
     $group: { 
      _id: { 
       Time: "$datetime", 
       Humidity: { "$avg" : "$humidity" }, 
       Temperature: { "$avg" : "$temperature"} 
      }, 
     }, 
    }, 

    { 
     $project :{ _id : 1 , Humidity : 1, Temperature: 1 } }, 
          { $limit : 10 }, 
       { $sort : {"_id.Time":1, "Humidity":1, "Temperature": 1}} 
      ]) 

私のコードである。また、私は空の配列に

感謝:)

答えて

0
を取得しています

問題は$ groupパイプラインにあります。

グループ化は、_idフィールドを使用して行われます。グループ化に使用するフィールドは、_idフィールドにのみ配置してください。その後、

あなたは日時フィールドでグループにあなたの結果をしたい場合は、

$group: { 
     "_id": {"Time":"$datetime"},     
     "Humidity": { "$avg" : "$humidity" }, 
     "Temperature": { "$avg" : "$temperature"}    
    } 

を使用するには、私はまだ空の配列を取得しています$group$avg

+0

の詳細を参照してください。私の 'datetime'と' interValue'は外れていると思いますか? – Ekom

+0

datetimeの 'setHours()'は、指定された間隔で今日の日付よりも約100年先の日付になります。必要に応じて日付の計算を調整します。正しい値が渡されているかどうかを確認するために、クエリの前に 'console.log'を実行してください。 –

+0

あなたはそうです。私の時は正しくありませんでした。しかし、私は時間間隔を追加するために何をすべきだと思いますか? – Ekom