Мне нужно сопоставить одно из двух полей, которое не должно быть равно нулю. Как это реализовать?
Я пробую эти решения, но мне не повезло:
Решение 1:
Model.aggregate[
{
$project: {
accountID: "$_id.accountID",
locationID: "$_id.locationID",
time: "$_id.time",
value: "$value",
actualValue: "$actualValue",
total: { $add: ["$value", "$actualValue"] },
},
},
{
$match: {
total: { $ne: 0 },
},
},
]
С этим решением будет неправильно при отрицательном плюсе с противоположной версией. Пример -1500 + 1500 станет нулем.
Решение 2
Model.aggregate([
{
$group: {
_id: {
accountID: "$accountID",
locationID: "$locationID",
time: "$time",
},
value: { $sum: "$values.val" },
actualValue: { $sum: "$values.actualVal" },
},
},
{
$addFields: {
absVal: { $abs: "$value" },
absActualVal: { $abs: "$actualValue" },
},
},
{
$project: {
accountID: "$_id.accountID",
locationID: "$_id.locationID",
time: "$_id.time",
value: "$value",
actualValue: "$actualValue",
total: { $add: ["$absVal", "$absActualVal"] },
},
},
{
$match: {
total: { $ne: 0 },
},
},
])
Это работает, но я потерял 1 секунду с 3,5 до 4,5 при поиске на 1 м документ.
Есть предложения? Сначала спасибо