V MongoDB, $abs
operátor agregačního kanálu vrátí absolutní hodnotu čísla.
Příklad
Předpokládejme, že máme kolekci nazvanou data
s následujícím dokumentem:
{ "_id" : 1, "a" : 20, "b" : -20 }
Můžeme použít $abs
operátor vrátí absolutní hodnoty a
a b
pole.
db.data.aggregate(
[
{ $project: {
_id: 0,
a: { $abs: [ "$a" ] },
b: { $abs: [ "$b" ] }
}
}
]
)
Výsledek:
{ "a" : 20, "b" : 20 }
Absolutní hodnoty nemají obsahovat žádná znaménka, takže můžeme vidět, že záporné znaménko bylo odstraněno z b
hodnotu.
Absolutní hodnotu čísla si můžete představit jako vzdálenost na číselné ose tohoto čísla od nuly.
Nulové hodnoty
Hodnoty Null vrátí null
při použití $abs
operátor.
Předpokládejme, že do naší sbírky přidáme následující dokument:
{ "_id" : 2, "a" : 0, "b" : null }
Spusťte $abs
operátor proti tomuto dokumentu:
db.data.aggregate(
[
{ $match: { _id: 2 } },
{ $project: {
_id: 0,
a: { $abs: [ "$a" ] },
b: { $abs: [ "$b" ] }
}
}
]
)
Výsledek:
{ "a" : 0, "b" : null }
Vidíme, že b
vyřešen na null
.
Můžeme také vidět, že 0
vyhodnotí na 0
.
Hodnoty NaN
Pokud je argument vyřešen na NaN
, $abs
vrátí NaN
.
Příklad:
db.data.aggregate(
[
{ $match: { _id: 2 } },
{ $project: {
_id: 0,
a: { $abs: [ "$a" ] },
b: { $abs: [ 1 * "g" ] }
}
}
]
)
Výsledek:
{ "a" : 0, "b" : NaN }
V tomto případě jsem zkusil číslo vynásobit řetězcem, což vedlo k NaN
se vrací.
Neexistující pole
Pokud $abs
operátor se použije na pole, které neexistuje, null
je vráceno.
Příklad:
db.data.aggregate(
[
{ $match: { _id: 2 } },
{ $project: {
_id: 0,
c: { $abs: [ "$c" ] }
}
}
]
)
Výsledek:
{ "c" : null }
V kombinaci s jinými operátory
V tomto příkladu kombinuji $abs
s $subtract
za účelem výpočtu velikosti rozdílu mezi poli a
a b
:
db.data.aggregate(
[
{ $match: { _id: 1 } },
{ $project: {
_id: 0,
a: 1,
b: 1,
result: {
$abs: {
$subtract: [ "$a", "$b" ]
}
}
}
}
]
)
Výsledek:
{ "a" : 20, "b" : -20, "result" : 40 }