В MongoDB, $abs
Операторът на конвейера за агрегиране връща абсолютната стойност на число.
Пример
Да предположим, че имаме колекция, наречена data
със следния документ:
{ "_id" : 1, "a" : 20, "b" : -20 }
Можем да използваме $abs
оператор за връщане на абсолютните стойности на a
и b
полета.
db.data.aggregate(
[
{ $project: {
_id: 0,
a: { $abs: [ "$a" ] },
b: { $abs: [ "$b" ] }
}
}
]
)
Резултат:
{ "a" : 20, "b" : 20 }
Абсолютните стойности не включват никакви знаци и така можем да видим, че отрицателният знак е премахнат от b
стойност.
Можете да мислите за абсолютна стойност на число като разстоянието на числовата права до това число от нулата.
Нулеви стойности
Нулевите стойности връщат null
когато използвате $abs
оператор.
Да предположим, че добавяме следния документ към нашата колекция:
{ "_id" : 2, "a" : 0, "b" : null }
Нека стартираме $abs
оператор срещу този документ:
db.data.aggregate(
[
{ $match: { _id: 2 } },
{ $project: {
_id: 0,
a: { $abs: [ "$a" ] },
b: { $abs: [ "$b" ] }
}
}
]
)
Резултат:
{ "a" : 0, "b" : null }
Можем да видим, че b
разрешен до null
.
Можем също да видим, че 0
разрешава до 0
.
NaN стойности
Ако аргументът се разреши до NaN
, $abs
връща NaN
.
Пример:
db.data.aggregate(
[
{ $match: { _id: 2 } },
{ $project: {
_id: 0,
a: { $abs: [ "$a" ] },
b: { $abs: [ 1 * "g" ] }
}
}
]
)
Резултат:
{ "a" : 0, "b" : NaN }
В този случай се опитах да умножа число по низ, което доведе до NaN
се връща.
Несъществуващи полета
Ако $abs
операторът се прилага срещу поле, което не съществува, null
се връща.
Пример:
db.data.aggregate(
[
{ $match: { _id: 2 } },
{ $project: {
_id: 0,
c: { $abs: [ "$c" ] }
}
}
]
)
Резултат:
{ "c" : null }
Комбинирано с други оператори
В този пример комбинирам $abs
с $subtract
за да се изчисли големината на разликата между полетата a
и b
:
db.data.aggregate(
[
{ $match: { _id: 1 } },
{ $project: {
_id: 0,
a: 1,
b: 1,
result: {
$abs: {
$subtract: [ "$a", "$b" ]
}
}
}
}
]
)
Резултат:
{ "a" : 20, "b" : -20, "result" : 40 }