En MongoDB, el $literal
El operador de canalización de agregación devuelve un valor sin analizarlo.
Acepta cualquier expresión válida y devuelve la expresión no analizada.
El $literal
El operador puede ser útil cuando tiene un valor que MongoDB podría interpretar inadvertidamente como una expresión, pero no lo desea.
Por ejemplo, si tiene un monto monetario que incluye un signo de dólar, MongoDB podría interpretarlo sin darse cuenta como un nombre de campo. Puedes usar $literal
para evitar que MongoDB interprete dichas expresiones.
Ejemplo
Supongamos que tenemos una colección llamada test
con el siguiente documento:
{ "_id" : 1, "name" : "Homer" }
Aquí hay un ejemplo de cómo aplicar $literal
:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 1 ] } } },
{
$project:
{
_id: 0,
interpreted: "$name",
literal: { $literal: "$name" }
}
}
]
)
Resultado:
{ "interpreted" : "Homer", "literal" : "$name" }
En este ejemplo, devolvemos el valor de name
campo usando $name
para referirse a ella.
También devolvemos el valor literal $name
, sin que MongoDB lo interprete como el name
campo:
Ejemplo 2
Supongamos que nuestra colección contiene el siguiente documento:
{ "_id" : 2, "a" : 10, "b" : 5 }
Aquí hay otro ejemplo del 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" ] } }
En este caso, el primer campo devuelto contiene el resultado de $multiply
operador contra el a
y b
campos.
El segundo campo simplemente genera el valor literal que proporcionamos al $literal
operador.