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 }