我目前正在對數據庫具有以下結構數組:MongoDB的合計 - 平均特定值的文件
{"_id" : ObjectId("1abc2"),
"startdatetime" : ISODate("2016-09-11T18:00:37Z"),
"diveValues" : [
{
"temp" : 15.269,
"depth" : 0.0,
},
{
"temp" : 14.779257384,
"depth" : 1.0,
},
{
"temp" : 14.3940253165,
"depth" : 2.0,
},
{
"temp" : 13.9225795455,
"depth" : 3.0,
},
{
"temp" : 13.8214431818,
"depth" : 4.0,
},
{
"temp" : 13.6899553571,
"depth" : 5.0,
}
]}
該數據庫擁有約深度n米水信息,並給出溫度深度。這存儲在「diveValues」數組中。我在平均日期之間的所有深度方面取得了成功,包括月平均值和日平均值。我遇到的一個嚴重問題是,在過去6個月的每個月中,平均數在1到4米之間。
這裏是平均溫度爲每月從一月到六月的一個例子,對所有的深度:
db.collection.aggregate(
[
{$unwind:"$diveValues"},
{$match:
{'startdatetime':
{$gt:new ISODate("2016-01-10T06:00:29Z"),
$lt:new ISODate("2016-06-10T06:00:29Z")}
}
},
{$group:
{_id:
{ year: { $year: "$startdatetime" },
month: { $month: "$startdatetime" }},
avgTemp: { $avg: "$diveValues.temp" }}
},
{$sort:{_id:1}}
]
)
,導致:
{ "_id" : { "year" : 2016, "month" : 1 }, "avgTemp" : 7.575706502958313 }
{ "_id" : { "year" : 2016, "month" : 3 }, "avgTemp" : 6.85037457740135 }
{ "_id" : { "year" : 2016, "month" : 4 }, "avgTemp" : 7.215702831902588 }
{ "_id" : { "year" : 2016, "month" : 5 }, "avgTemp" : 9.153453683614638 }
{ "_id" : { "year" : 2016, "month" : 6 }, "avgTemp" : 11.497953009390237 }
現在,我似乎無法弄清楚如何在同一時期獲得1至4米的平均溫度。
我一直試圖按想要的深度對值進行分組,但沒有管理它 - 更多的時候是以不好的語法結束。此外,如果我沒有錯,只要潛水的值爲1米和4米,$匹配管道就會返回所有深度,這樣就不會起作用。使用find()工具我使用$ slice從數組中返回我想要的值 - 但沒有成功與aggregate()函數一起使用。
有沒有辦法解決這個問題?在此先感謝,非常感謝!
非常感謝,解決了這個問題。並且非常感謝您在放鬆之前放置比賽的提示。 – Vegar
@Vegar不用擔心。出於好奇,你最終使用了哪條管線,第一條還是最後一條? – chridam
爲了我的需要,第一個最適合我。但是我非常感謝你們寫了這兩本書,因爲我覺得它很有教育意義。 – Vegar