I MongoDB er $abs
aggregeringspipeline-operatør returnerer den absolutte værdi af et tal.
Eksempel
Antag, at vi har en samling kaldet data
med følgende dokument:
{ "_id" : 1, "a" : 20, "b" : -20 }
Vi kan bruge $abs
operator for at returnere de absolutte værdier af a
og b
felter.
db.data.aggregate(
[
{ $project: {
_id: 0,
a: { $abs: [ "$a" ] },
b: { $abs: [ "$b" ] }
}
}
]
)
Resultat:
{ "a" : 20, "b" : 20 }
Absolutte værdier inkluderer ikke nogen tegn, og så vi kan se, at det negative tegn er blevet fjernet fra b
værdi.
Du kan tænke på en absolut værdi af et tal som værende afstanden på tallinjen mellem det tal fra nul.
Nul-værdier
Nul-værdier returnerer null
når du bruger $abs
operatør.
Antag, at vi tilføjer følgende dokument til vores samling:
{ "_id" : 2, "a" : 0, "b" : null }
Lad os køre $abs
operatør mod dette dokument:
db.data.aggregate(
[
{ $match: { _id: 2 } },
{ $project: {
_id: 0,
a: { $abs: [ "$a" ] },
b: { $abs: [ "$b" ] }
}
}
]
)
Resultat:
{ "a" : 0, "b" : null }
Vi kan se, at b
løst til null
.
Vi kan også se, at 0
løses til 0
.
NaN-værdier
Hvis argumentet løses til NaN
, $abs
returnerer NaN
.
Eksempel:
db.data.aggregate(
[
{ $match: { _id: 2 } },
{ $project: {
_id: 0,
a: { $abs: [ "$a" ] },
b: { $abs: [ 1 * "g" ] }
}
}
]
)
Resultat:
{ "a" : 0, "b" : NaN }
I dette tilfælde forsøgte jeg at multiplicere et tal med en streng, hvilket resulterede i NaN
bliver returneret.
Ikke-eksisterende felter
Hvis $abs
operator anvendes mod et felt, der ikke eksisterer, null
er returneret.
Eksempel:
db.data.aggregate(
[
{ $match: { _id: 2 } },
{ $project: {
_id: 0,
c: { $abs: [ "$c" ] }
}
}
]
)
Resultat:
{ "c" : null }
Kombineret med andre operatører
I dette eksempel kombinerer jeg $abs
med $subtract
for at beregne størrelsen af forskellen mellem felterne a
og 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 }