我想獲得每個$ src的最後/最新值的回報,但也獲得30天的$ min和$ max #inches字段。看到下面的查詢MongoDB聚合最後的記錄和匹配一些字段到最後30天
date = datetime.datetime.today() - datetime.timedelta(days=31)
last_data = collection.aggregate([
{"$group": {"_id": "$src",
"date": {"$last": "$time"},
"inches": {"$last": "$inches"},
"low":{"$min":"$inches"},
"high":{"$max":"$inches"}
} }
])
這工作正常,除了低和高都是時間永遠低和高。我想在最近30天內限制低點和高點。如果可能的話使用datetime timedelta對象。
下面是返回某個日期的所有數據的示例。我不知道該怎麼做是將兩個查詢合併爲一個。
data = collection.find({'time':{ "$gte" : (date) }})
更新1:嘗試下面的代碼了...
注:日期是劃時代的時間回到30天 今天= 1508360994.741111 日期= 1505682594.741111
collection.aggregate([
{"$group": {"_id": "$src",
"date": {"$last": "$time"},
"inches": {"$last": "$inches"},
"low": {
"$min": {
"$cond": [
{"time": {"$lte": ["$time", date]}},
"$inches",
None
]
}
},
"high": {
"$max": {
"$cond": [
{"time": {"$gte": ["$time", date]}},
"$inches",
None
]
}
},
}}
])
我得到這樣的回報:所以看起來它可能正在工作。我需要做一些健全的檢查來確保。 {'_id':'c4028504','date':datetime.datetime(2017,10,16,2,47,21,939000),'inches':85.0,'low':0,'high':2007.25 },
你會如何添加第二個條件,只顯示低> 0.請參閱下面我的衣衫襤褸的嘗試。
"low": {
"$min": {
"$cond": [ { "$and" : [
{ "time": {"$gte": ["$time", date] },
{ "inches": {"$gt": ["$inches", 0] }
]},
"$inches",
None
]}
}
},
你可能會發布一些示例數據? – dnickless