次のようなコレクションがあります。
[{
"org": "A",
"type": "simple",
"payFor": 3,
"price": 100
},
{
"org": "A",
"type": "custom",
"payFor": 2,
"price": 115
},
{
"org": "B",
"type": "simple",
"payFor": 1,
"price": 110
},
{
"org": "B",
"type": "custom",
"payFor": 2,
"price": 200
},
{
"org": "B",
"type": "custom",
"payFor": 4,
"price": 220
}]
また、「type」の最初の「payFor」価格に対してのみ支払いが表示される「org」によるグループを実行するためのクエリで結果を生成する必要があります。$slice
演算子で式の結果を使用しようとしています$add
が、これは機能しません。
パイプライン:
[{
"$group": {
"_id": {
"org": "$org",
"type": "$type"
},
"payFor": {
"$max": "$payFor"
},
"count": {
"$sum": 1
},
"prices": {
"$push": "$price"
}
}
},
{
"$group": {
"_id": "$_id.org",
"payments": {
"$push": {
"type": "$_id.type",
"forFirst": "$payFor",
"sum": {
"$cond": [
{
"$gte": [
"$payFor",
"$count"
]
},
{
"$add": {
"$prices": {
"$slice": "$count"
}
}
},
{
"$add": "$prices"
}
]
}
}
}
}
}]
巻き戻された価格をトラバースして、それらの「payFor」カウントのみを選択できることを私は知っています。ただし、結果のコレクションは上記の例よりも豊富であり、この操作により不必要なオーバーヘッドが発生します。
コミュニティからのアドバイスが必要です。お願いします。ありがとう。