W MongoDB $literal Operator potoku agregacji zwraca wartość bez parsowania.
Akceptuje każde poprawne wyrażenie i zwraca wyrażenie nieprzeanalizowane.
$literal Operator może być przydatny, gdy masz wartość, którą MongoDB może nieumyślnie zinterpretować jako wyrażenie, ale tego nie chcesz.
Na przykład, jeśli masz kwotę pieniężną zawierającą znak dolara, MongoDB może nieumyślnie zinterpretować ją jako nazwę pola. Możesz użyć $literal aby uniemożliwić MongoDB interpretację takich wyrażeń.
Przykład
Załóżmy, że mamy kolekcję o nazwie test z następującym dokumentem:
{ "_id" : 1, "name" : "Homer" }
Oto przykład zastosowania $literal :
db.test.aggregate(
[
{ $match: { _id: { $in: [ 1 ] } } },
{
$project:
{
_id: 0,
interpreted: "$name",
literal: { $literal: "$name" }
}
}
]
) Wynik:
{ "interpreted" : "Homer", "literal" : "$name" }
W tym przykładzie zwracamy wartość name pole za pomocą $name odnieść się do niego.
Zwracamy również wartość dosłowną $name , bez konieczności zinterpretowania go przez MongoDB jako name pole:
Przykład 2
Załóżmy, że nasza kolekcja zawiera następujący dokument:
{ "_id" : 2, "a" : 10, "b" : 5 }
Oto kolejny przykład użycia $literal :
db.test.aggregate(
[
{ $match: { _id: { $in: [ 2 ] } } },
{
$project:
{
_id: 0,
interpreted: { $multiply: [ "$a", "$b" ] },
literal: { $literal: { $multiply: [ "$a", "$b" ] } }
}
}
]
) Wynik:
{ "interpreted" : 50, "literal" : { "$multiply" : [ "$a", "$b" ] } }
W takim przypadku pierwsze zwrócone pole zawiera wynik $multiply operator przed a i b pola.
Drugie pole po prostu wyświetla wartość dosłowną, którą podaliśmy do $literal operatora.