Что я хочу сделать, так это отсортировать по другим полям, не существующим в группе, по операции. В SQL я бы применил функцию Window, но я не знаю, как это сделать здесь.
Мой код следующий:
pipeline = [
{
"$match": {
"contract": contract,
"frequency": frequency,
"date": {"$gte": date_start, "$lte": date_final},
"type": type,
"subtype": subtype
}
},
{
"$unwind": {"path": "$v", "includeArrayIndex": "arrayIndex"}
},
{
"$group": {
"_id": {
"arrayIndex": "$arrayIndex",
"contract": "$contract",
"frequency": "$frequency",
"source": "$source",
"type": "$type",
"subtype": "$subtype",
"date": "$date"
},
"values": {"$sum": "$v.value"}
}
},
{
"$sort": {"_id.arrayIndex": 1}
},
{
"$group": {
"_id": {
"contract": "$_id.contract",
"frequency": "$_id.frequency",
"type": "$_id.type",
"source": "$_id.source",
"subtype": "$_id.subtype",
"date": "$_id.date"
},
"values": {"$push": "$values"}
}
},
{
"$project": {"_id": 0, "cups": "$_id.cups", "date": "$_id.date", "v": "$values"}
}
]
Я бы хотел сгруппировать по эти поля и сортировать по arrayIndex, так что мои окончательные значения массива находятся в соответствующей позиции.
Большое спасибо.