2014-03-05 61 views
2

我使用MongoDB的(我在MongoDB中新)來存儲我的能耗數據的最後一個記錄,每分鐘有一個新的記錄,這是一個例子:查找每一天

{"id":"5309d4cae4b0fbd904cc00e1","adco":"O","hchc":7267599,"hchp":10805900,"hhphc":"g","ptec":"c","iinst":13,"papp":3010,"imax":58,"optarif":"s","isousc":60,"motdetat":"Á","date":1393156826114} 

所以我每天有大約1440條記錄。

我想計算白天的成本,但問題是我需要當天的最後一個記錄,因爲這個記錄可以給我絕對千瓦時(千瓦小時)的數量。因此,如果我刪除昨天最後一個記錄的千瓦時量,那麼我有一天的千瓦時量。

該字段hchp給了我絕對的千瓦時。字段date對應於以毫秒爲單位的度量時間。

當日消費量=當天結束時的絕對消費量 - 昨天結束的絕對消費量。

怎樣才能獲得mongodb中每一天的最後記錄?

注:我使用的MongoDB中的Spring Java,所以我需要一個像這樣的查詢:

實例來獲取所有措施:

@Query("{ 'date' : { $gt : ?0 }}") 
public List<Mesure> findByDateGreaterThan(Date date, Sort sort); 
+0

您是否看過獲取表示日期的範圍,然後對最高日期值進行排序和限制? – WiredPrairie

回答

2

不太清楚你在這裏要什麼,但你可以如果我的理解是正確的,那麼就一起做這個。因此,要獲得最後一個記錄的每一天:

db.collection.aggregate([ 

    // Date math converts to whole day 
    {"$project": { 
     "adco": 1, 
     "hchc": 1, 
     "hchp": 1, 
     "hhphc": 1, 
     "ptec": 1, 
     "iinst": 1, 
     "papp": 1, 
     "imax": 1, 
     "optarif": 1, 
     "isousc": 1, 
     "motdetat": 1, 
     "date": 1, 
     "wholeDay": {"$subtract": ["$date",{"$mod": ["$date",86400000]}]} 
    }}, 

    // Group on wholeDay (_id insertion is monotonic) 
    {"$group": 
     "_id": "$wholeDay", 
     "docId": {"$last": "$_id" }, 
     "adco": {"$last": "$adco" }, 
     "hchc": {"$last": "$hchc" }, 
     "hchp": {"$last": "$hchp" }, 
     "hhphc": {"$last": "$hhphc" }, 
     "ptec": {"$last": "$ptec" }, 
     "iinst": {"$last": "$iinst" }, 
     "papp": {"$last": "$papp" }, 
     "imax": {"$last": "$imax" }, 
     "optarif": {"$last": "$optarif", 
     "isousc": {"$last": "$isouc" }, 
     "motdetat": {"$last": "$motdetat" }, 
     "date": {"$last": "$date" }, 
    }} 
]) 

所以這裏的原則是,鑑於時間戳值,執行日期的功能項目,截至每一天開始的午夜時間。然後,由於文檔上的_id鍵已經是單調的(總是增加),那麼只需在wholeDay值上分組,同時從分組邊界中拖出$last文檔。

如果你不需要所有的字段,那麼只有你想要的項目和組。

是的,你可以在春季數據框架中做到這一點。我確定那裏有一個包裝的命令。但除此之外,咒語才能到本機命令是這樣的:

mongoOps.getCollection("yourCollection").aggregate(...) 

爲了記錄在案,如果你真的有BSON日期類型,而不是一個時間戳作爲一個數字,那麼你可以跳過日期的功能:

db.collection.aggregate([ 
    { "$group": { 
     "_id": { 
      "year": { "$year": "$date" }, 
      "month": { "$month": "$date" }, 
      "day": { "$dayOfMonth": "$date" } 
     }, 
     "hchp": { "$last": "$hchp" } 
    }} 
])