不太清楚你在這裏要什麼,但你可以如果我的理解是正確的,那麼就一起做這個。因此,要獲得最後一個記錄的每一天:
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" }
}}
])
您是否看過獲取表示日期的範圍,然後對最高日期值進行排序和限制? – WiredPrairie