マイドキュメントは、次のようになりますグループは、最初のカテゴリで、その後、週または月で
{ "$match" : { "timestamp" : { "$gt" : FROM , "$lt" : TO }}},
{ "$sort" : { "timestamp" : 1 }},
{ "$group" : {
"_id" : "$category",
"data" : { "$push" : { "timestamp" : "$timestamp" , "amount" : "$amount" }}
}}
:
今
{
category: "1",
timestamp: ISODate("2016-07-16T00:00:00.000Z"),
amount: 0
},
{
category: "1",
timestamp: ISODate("2016-08-18T00:00:00.000Z"),
amount: 15
},
{
category: "1",
timestamp: ISODate("2016-08-01T00:00:00.000Z"),
amount: 5
},
{
category: "2",
timestamp: ISODate("2016-08-18T00:00:00.000Z"),
amount: 10
}
私が(すでに動作します)カテゴリー別最初のグループが欲しいです
data
アレイ内のオブジェクトをグループ化します。 を毎週の最大金額にするには(または月 - ユーザー入力に応じて)。
(月ごとにグループ化する際に)結果は、このようになります。
{
_id: "1",
data: [
{
timestamp: "2016-07", // could also be an ISODate with
amount: 0 // first (or last) day of month
}, // if that makes things easier
{
timestamp: "2016-08",
amount: 15
}
]
},
{
_id: "2",
data: [
{
timestamp: "2016-08",
amount: 10
}
]
}
私はdata
配列をunwind
しようとしたし、再度グループ化するが、それは総混乱が生じました。
希望のアイデアや解決方法がありますようお願いいたします。
EDIT:追加の質問:
私は$match
のためだけで正常に動作category
にインデックスを入れています。並べ替えのためにtimestamp
にインデックスを配置すると便利です(挿入順序はタイムスタンプの順序と異なる可能性があるため)か、このインデックスは集約内に何の効果もありませんか?
うわー!ありがとうございました!私は後でそれを試してみよう。並べ替えのためにタイムスタンプフィールドにインデックスを作成する意見はありますか? –
私は自分のコードに基づいて独自の答えを追加しました。 'group1'と' unwind'は必要ありませんが、コレクション自体をグループ化します。しかし、 '$ match'の直後の' $ sort'は期待された結果を得られませんでした。私はこれを説明することはできません。私は '$ sort'を' $ group'の段階の間に置いています。 –