W MongoDB $abs
Operator potoku agregacji zwraca wartość bezwzględną liczby.
Przykład
Załóżmy, że mamy kolekcję o nazwie data
z następującym dokumentem:
{ "_id" : 1, "a" : 20, "b" : -20 }
Możemy użyć $abs
operator do zwracania wartości bezwzględnych a
i b
pola.
db.data.aggregate(
[
{ $project: {
_id: 0,
a: { $abs: [ "$a" ] },
b: { $abs: [ "$b" ] }
}
}
]
)
Wynik:
{ "a" : 20, "b" : 20 }
Wartości bezwzględne nie zawierają żadnych znaków, więc widzimy, że znak minus został usunięty z b
wartość.
Możesz myśleć o wartości bezwzględnej liczby jako o odległości na osi liczbowej tej liczby od zera.
Wartości puste
Wartości null zwracają null
podczas korzystania z $abs
operatora.
Załóżmy, że do naszej kolekcji dodamy następujący dokument:
{ "_id" : 2, "a" : 0, "b" : null }
Uruchommy $abs
operatora względem tego dokumentu:
db.data.aggregate(
[
{ $match: { _id: 2 } },
{ $project: {
_id: 0,
a: { $abs: [ "$a" ] },
b: { $abs: [ "$b" ] }
}
}
]
)
Wynik:
{ "a" : 0, "b" : null }
Widzimy, że b
rozwiązane do null
.
Widzimy również, że 0
rozwiązuje się do 0
.
Wartości NaN
Jeśli argument kończy się na NaN
, $abs
zwraca NaN
.
Przykład:
db.data.aggregate(
[
{ $match: { _id: 2 } },
{ $project: {
_id: 0,
a: { $abs: [ "$a" ] },
b: { $abs: [ 1 * "g" ] }
}
}
]
)
Wynik:
{ "a" : 0, "b" : NaN }
W tym przypadku próbowałem pomnożyć liczbę przez ciąg, co spowodowało NaN
zostanie zwrócony.
Nieistniejące pola
Jeśli $abs
operator jest stosowany do pola, które nie istnieje, null
jest zwracany.
Przykład:
db.data.aggregate(
[
{ $match: { _id: 2 } },
{ $project: {
_id: 0,
c: { $abs: [ "$c" ] }
}
}
]
)
Wynik:
{ "c" : null }
W połączeniu z innymi operatorami
W tym przykładzie łączę $abs
z $subtract
w celu obliczenia wielkości różnicy między polami a
i b
:
db.data.aggregate(
[
{ $match: { _id: 1 } },
{ $project: {
_id: 0,
a: 1,
b: 1,
result: {
$abs: {
$subtract: [ "$a", "$b" ]
}
}
}
}
]
)
Wynik:
{ "a" : 20, "b" : -20, "result" : 40 }