No MongoDB, o
$literal
operador de pipeline de agregação retorna um valor sem análise. Ele aceita qualquer expressão válida e retorna a expressão não analisada.
O
$literal
O operador pode ser útil quando você tem um valor que o MongoDB pode interpretar inadvertidamente como uma expressão, mas você não quer. Por exemplo, se você tiver um valor monetário que inclua um cifrão, o MongoDB pode inadvertidamente interpretar isso como um nome de campo. Você pode usar
$literal
para evitar que o MongoDB interprete tais expressões. Exemplo
Suponha que tenhamos uma coleção chamada
test
com o seguinte documento:{ "_id" : 1, "name" : "Homer" }
Aqui está um exemplo de aplicação de
$literal
:db.test.aggregate(
[
{ $match: { _id: { $in: [ 1 ] } } },
{
$project:
{
_id: 0,
interpreted: "$name",
literal: { $literal: "$name" }
}
}
]
)
Resultado:
{ "interpreted" : "Homer", "literal" : "$name" }
Neste exemplo, retornamos o valor do
name
campo usando $name
para se referir a ele. Também retornamos o valor literal
$name
, sem que o MongoDB o interprete como o name
campo:Exemplo 2
Suponha que nossa coleção contenha o seguinte documento:
{ "_id" : 2, "a" : 10, "b" : 5 }
Aqui está outro exemplo de uso de
$literal
:db.test.aggregate(
[
{ $match: { _id: { $in: [ 2 ] } } },
{
$project:
{
_id: 0,
interpreted: { $multiply: [ "$a", "$b" ] },
literal: { $literal: { $multiply: [ "$a", "$b" ] } }
}
}
]
)
Resultado:
{ "interpreted" : 50, "literal" : { "$multiply" : [ "$a", "$b" ] } }
Neste caso, o primeiro campo retornado contém o resultado do
$multiply
operador contra o a
e b
Campos. O segundo campo simplesmente gera o valor literal que fornecemos ao
$literal
operador.