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.