ドキュメントの配列内の特定の値について平均:MongoDBの集合Iは、現在、以下の構造を有するデータベースに取り組んでい
{"_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メートルの深さにすることです。ここで
は、1月から6月までの各月の平均気温の一例であり、全ての深さのために:
に結果の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メートルにする。
私は希望の深さで値をグループ化しようとしていましたが、それを管理していませんでした。また、私が間違っていなければ、$ matchパイプラインはダイビングが1メートルと4メートルの値を持つ限りすべての深さを返すので、うまくいかないでしょう。
find()ツールを使用して、私は配列からの値を返すために$ sliceを使用していますが、aggregate()関数と一緒に成功しませんでした。
これを解決する方法はありますか?事前に感謝、多くの感謝!
ありがとう、これはうまくいった。巻き戻す前に試合をすることについてのヒントをありがとう。 – Vegar
@ヴェガール心配する必要はありません。最初から最後のパイプラインを使い終わったのは、驚くべきことですか? – chridam
私の必要性のために、最初のものが私に最も適しています。しかし、私はそれが非常に教育的であることがわかっているので、あなたはそれらを両方書くと非常に感謝しています。 – Vegar