に、私は3つの文書がありますソートサブアレイ集計結果
{
"id_user": "t57092501745ad6285ac58c22",
"name": "Day #1",
"date": {
"$date": "2016-04-21T20:50:00.190Z"
},
"text": "My text"
}
{
"id_user": "t57092501745ad6285ac58c22",
"name": "Day #2",
"date": {
"$date": "2016-04-22T20:50:00.190Z"
},
"text": "My text"
}
{
"id_user": "t57092501745ad6285ac58c22",
"name": "Day #3",
"date": {
"$date": "2016-04-22T20:51:00.190Z"
},
"text": "My text"
}
を、私はその日のためのグループ、これらに必要なので、私は:
{
"$match": {
"id_user": "t57092501745ad6285ac58c22"
}
}, {
"$sort": {
"date": -1
}
}, {
"$group": {
"_id": {
$dayOfYear: "$date"
},
"data": {
"$push": {
"id_user": "$id_user",
"name": "$name",
"date": "$date",
"text": "$text"
},
},
}
}
と結果は次のとおりです。
{
{
_id: 113,
data: [{
"id_user": "t57092501745ad6285ac58c22",
name: "Day #1",
date: "2016-04-22T20:51:00.190Z",
text: "My text"
}]
}, {
_id: 114,
data: [{
"id_user": "t57092501745ad6285ac58c22",
name: "Day #3",
date: "2016-04-23T20:51:00.190Z",
text: "My text"
}, {
"id_user": "t57092501745ad6285ac58c22",
name: "Day #2",
date: "2016-04-23T20:50:00.190Z",
text: "My text"
}]
}
}
、それは大丈夫だが、順番は私が必要なものではありません。
{ Day #1 }, { Day #3, Day #2 }
私は2グループの順序を逆にすることができますsort
{ "date": 1 }
に、このよう変更した場合:
{ Day #3, Day #2 }, { Day #1 }
を私は知らないどのようにも変更サブアレイ内の順にカントー正しいものを入手してください:
正しい方法はありますか?
正しいです。 '{" $ sort ":{" date ":1}}' –
いいえ、これはうまくいかないと言いますが、私の質問をお読みください。 –
はい、少し考えてください。 '$ sort'は配列に追加する前に' $ sort'を実行するので、 '$ push'は' $ sort'の発見順序を尊重し、配列要素はそのようにソートされます'$ group'は** not **ですので、' 'ドキュメント ''を順番に並べ替えるには、最後のパイプラインステージ(昇順)として別の**' $ sort'が必要です。 '{ "$ sort":{"_id":1}} '慎重に見て、Day#3はDay#2よりも"遅い "日付ですので、順序が間違っています。 –