2017-01-04 104 views
0

的條件的我有一個MongoDB的存儲來自不同傳感器的數據。 它具有以下結構:查詢的文檔和它的所有的子文檔匹配的mongodb

{ 
    "_id" : 1, 
    "sensorName" : "Heart Rate", 
    "samplePeriod" : 1000, 
    "data" : [ 
      { 
       "timestamp" : NumberLong("1483537204046"), 
       "dataPoints" : [ 68 70 ] 
      }, 
      { 
       "timestamp" : NumberLong("1483537206046"), 
       "dataPoints" : [ 68 70 ] 
      } 
    ] 
} 
{ 
    "_id" : 2, 
    "sensorName" : "Ambient Light", 
    "samplePeriod" : 500, 
    "data" : [ 
      { 
       "timestamp" : NumberLong("1483537204058"), 
       "dataPoints" : [ 56, 54, 54, 54 ] 
      }, 
      { 
       "timestamp" : NumberLong("1483537206058"), 
       "dataPoints" : [ 56, 54, 54, 54 ] 
      } 
    ] 
} 

現在比如我需要的「心率」 - 文件將其所有字段和那些其「數據」 - 子文檔與條件匹配「時間戳1483537204000和1483537214000之間」 。

我知道的聚集,但無法弄清楚,如何不僅返回匹配的子文檔,但回到整個「心率」 - 文件僅包含在「數據」匹配的子文檔。

我的結構是否有效?您是否有任何提示有效查詢此類數據的更好結構?

在此先感謝!

回答

0

你可以嘗試下面的東西。

$匹配,以保持心臟率紀錄。

$過濾器來過濾該情況的子文檔。

$項目中顯示的結果。

aggregate([{ 
    $match: { 
     "_id": 1 
    } 
}, { 
    "$project": { 
     "_id": 1, 
     "sensorName": 1, 
     "samplePeriod": 1, 
     "data": { 
      "$filter": { 
       "input": "$data", 
       "as": "result", 
       "cond": { 
        $and: [{ 
         $gte: ["$$result.timestamp", 1483537204000] 
        }, { 
         $lte: ["$$result.timestamp", 1483537214000] 
        }] 
       } 
      } 
     } 
    } 
}]) 
+0

完美的作品!謝謝。 有沒有辦法在Java春天做到這一點? – Nas3nmann

相關問題