Я пытаюсь вычесть значения из массива final
и массива start
в моем конвейере агрегации. Но в некоторых исключительных случаях перед вычитанием требуется дополнительное c logi.
Ожидаемый результат:
- Мне нужно вычесть n-е значение массива
start
из n-е значение final
array - И затем получить общую сумму вычтенных значений
Исключительные случаи:
- Если n-е значение массива
start
равно NULL, используйте значение start_default (из запроса) - Если n-е значение массива
final
равно NULL, используйте значение из final_default
array
После некоторых этапов агрегации мой документ MongoDB имеет следующий формат:
Предполагая, что значение start_default = 1
У меня есть прокомментировал способ, которым я ожидаю выполнять вычитания в каждой группе
{
"data": [
{
"key": "TP-1",
"status_map": [
{
"status": "Closed",
"final": [
6,
3
], // Expected Output
"start": [ // sum:6 [(6-2)+(3-1(start_default))=4+2]
2
],
"final_default": [
4
]
},
{
"status": "Done",
"final": [
4
], // Expected Output
"start": [ // sum:2 [(4-3)+(2(final_default)-1)=1+1]
3,
1
],
"final_default": [
2
]
}
]
},
{
"key": "TP-2",
"status_map": [
{
"status": "Closed",
"final": [
1,
5
], // Expected Output
"start": [], //sum:4 [(1-1(start_default))+(5-1(start_default))=0+4]
"final_default": [
3
]
},
{
"status": "Done",
"final": [], // Expected Output
"start": [ //sum:3 [(5(final_default)-3)+(5(final_default)-4)=2+1]
3,
4
],
"final_default": [
5
]
}
]
}
]
}
Вот мой ожидаемый результат, предполагая, что start_default
value = 1
{
"data": [
{
"key": "TP-1",
"status_map": [
{
"status": "Closed",
"sum": 6 //[(6-2)+(3-1(start_default))=4+2]
{
"status": "Done",
"sum": 2 //[(4-3)+(2(final_default)-1)=1+1]
}
]
},
{
"key": "TP-2",
"status_map": [
{
"status": "Closed",
"sum": 4 //[(1-1(start_default))+(5-1(start_default))=0+4]
},
{
"status": "Done",
"sum": 3 //[(5(final_default)-3)+(5(final_default)-4)=2+1]
}
]
}
]
}
Как достичь этот вариант использования?