V MongoDB, $literal
operátor agregačního kanálu vrátí hodnotu bez analýzy.
Přijímá jakýkoli platný výraz a vrací neanalyzovaný výraz.
$literal
Operátor může být užitečný, když máte hodnotu, kterou by MongoDB mohl neúmyslně interpretovat jako výraz, ale vy to nechcete.
Pokud máte například peněžní částku, která obsahuje znak dolaru, MongoDB to může neúmyslně interpretovat jako název pole. Můžete použít $literal
zabránit MongoDB v interpretaci takových výrazů.
Příklad
Předpokládejme, že máme kolekci nazvanou test
s následujícím dokumentem:
{ "_id" : 1, "name" : "Homer" }
Zde je příklad použití $literal
:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 1 ] } } },
{
$project:
{
_id: 0,
interpreted: "$name",
literal: { $literal: "$name" }
}
}
]
)
Výsledek:
{ "interpreted" : "Homer", "literal" : "$name" }
V tomto příkladu vrátíme hodnotu name
pole pomocí $name
odkazovat na to.
Vrátíme také doslovnou hodnotu $name
, aniž by to MongoDB interpretovalo jako name
pole:
Příklad 2
Předpokládejme, že naše sbírka obsahuje následující dokument:
{ "_id" : 2, "a" : 10, "b" : 5 }
Zde je další příklad použití $literal
:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 2 ] } } },
{
$project:
{
_id: 0,
interpreted: { $multiply: [ "$a", "$b" ] },
literal: { $literal: { $multiply: [ "$a", "$b" ] } }
}
}
]
)
Výsledek:
{ "interpreted" : 50, "literal" : { "$multiply" : [ "$a", "$b" ] } }
V tomto případě první vrácené pole obsahuje výsledek $multiply
operátor proti a
a b
pole.
Druhé pole jednoduše vypíše doslovnou hodnotu, kterou jsme poskytli do $literal
operátor.