In MongoDB, de $abs
aggregatiepijplijnoperator retourneert de absolute waarde van een getal.
Voorbeeld
Stel dat we een verzameling hebben met de naam data
met het volgende document:
{ "_id" : 1, "a" : 20, "b" : -20 }
We kunnen de $abs
. gebruiken operator om de absolute waarden van de a
. te retourneren en b
velden.
db.data.aggregate(
[
{ $project: {
_id: 0,
a: { $abs: [ "$a" ] },
b: { $abs: [ "$b" ] }
}
}
]
)
Resultaat:
{ "a" : 20, "b" : 20 }
Absolute waarden bevatten geen tekens, en dus kunnen we zien dat het minteken is verwijderd uit de b
waarde.
Je kunt een absolute waarde van een getal zien als de afstand, op de getallenlijn, van dat getal vanaf nul.
Null-waarden
Null-waarden retourneren null
bij gebruik van de $abs
telefoniste.
Stel dat we het volgende document aan onze collectie toevoegen:
{ "_id" : 2, "a" : 0, "b" : null }
Laten we de $abs
. uitvoeren operator tegen dat document:
db.data.aggregate(
[
{ $match: { _id: 2 } },
{ $project: {
_id: 0,
a: { $abs: [ "$a" ] },
b: { $abs: [ "$b" ] }
}
}
]
)
Resultaat:
{ "a" : 0, "b" : null }
We kunnen zien dat b
opgelost tot null
.
We kunnen ook zien dat 0
wordt omgezet in 0
.
NaN-waarden
Als het argument wordt omgezet in NaN
, $abs
retourneert NaN
.
Voorbeeld:
db.data.aggregate(
[
{ $match: { _id: 2 } },
{ $project: {
_id: 0,
a: { $abs: [ "$a" ] },
b: { $abs: [ 1 * "g" ] }
}
}
]
)
Resultaat:
{ "a" : 0, "b" : NaN }
In dit geval probeerde ik een getal te vermenigvuldigen met een string, wat resulteerde in NaN
wordt geretourneerd.
Niet-bestaande velden
Als de $abs
operator wordt toegepast op een veld dat niet bestaat, null
wordt geretourneerd.
Voorbeeld:
db.data.aggregate(
[
{ $match: { _id: 2 } },
{ $project: {
_id: 0,
c: { $abs: [ "$c" ] }
}
}
]
)
Resultaat:
{ "c" : null }
Gecombineerd met andere operators
In dit voorbeeld combineer ik $abs
met $subtract
om de grootte van het verschil tussen velden a
. te berekenen en b
:
db.data.aggregate(
[
{ $match: { _id: 1 } },
{ $project: {
_id: 0,
a: 1,
b: 1,
result: {
$abs: {
$subtract: [ "$a", "$b" ]
}
}
}
}
]
)
Resultaat:
{ "a" : 20, "b" : -20, "result" : 40 }