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 }