I MongoDB, $abs
aggregeringspipeline-operatören returnerar det absoluta värdet av ett tal.
Exempel
Anta att vi har en samling som heter data
med följande dokument:
{ "_id" : 1, "a" : 20, "b" : -20 }
Vi kan använda $abs
operatorn för att returnera de absoluta värdena för a
och b
fält.
db.data.aggregate(
[
{ $project: {
_id: 0,
a: { $abs: [ "$a" ] },
b: { $abs: [ "$b" ] }
}
}
]
)
Resultat:
{ "a" : 20, "b" : 20 }
Absoluta värden innehåller inga tecken, så vi kan se att det negativa tecknet har tagits bort från b
värde.
Du kan tänka dig att ett absolut värde för ett tal är avståndet, på tallinjen, för det talet från noll.
Nullvärden
Nullvärden returnerar null
när du använder $abs
operatör.
Anta att vi lägger till följande dokument i vår samling:
{ "_id" : 2, "a" : 0, "b" : null }
Låt oss köra $abs
operatör mot det dokumentet:
db.data.aggregate(
[
{ $match: { _id: 2 } },
{ $project: {
_id: 0,
a: { $abs: [ "$a" ] },
b: { $abs: [ "$b" ] }
}
}
]
)
Resultat:
{ "a" : 0, "b" : null }
Vi kan se att b
löst till null
.
Vi kan också se att 0
löser sig till 0
.
NaN-värden
Om argumentet löser sig till NaN
, $abs
returnerar NaN
.
Exempel:
db.data.aggregate(
[
{ $match: { _id: 2 } },
{ $project: {
_id: 0,
a: { $abs: [ "$a" ] },
b: { $abs: [ 1 * "g" ] }
}
}
]
)
Resultat:
{ "a" : 0, "b" : NaN }
I det här fallet försökte jag multiplicera ett tal med en sträng, vilket resulterade i NaN
returneras.
Icke-existerande fält
Om $abs
operatorn tillämpas mot ett fält som inte finns, null
returneras.
Exempel:
db.data.aggregate(
[
{ $match: { _id: 2 } },
{ $project: {
_id: 0,
c: { $abs: [ "$c" ] }
}
}
]
)
Resultat:
{ "c" : null }
Kombinerat med andra operatörer
I det här exemplet kombinerar jag $abs
med $subtract
för att beräkna storleken på skillnaden mellan fälten a
och b
:
db.data.aggregate(
[
{ $match: { _id: 1 } },
{ $project: {
_id: 0,
a: 1,
b: 1,
result: {
$abs: {
$subtract: [ "$a", "$b" ]
}
}
}
}
]
)
Resultat:
{ "a" : 20, "b" : -20, "result" : 40 }