Definición
$literalDevuelve un valor sin analizarlo. Usar para valores que el pipeline de agregación pueda interpretar como una expresión.
La
$literalLa expresión tiene la siguiente sintaxis:{ $literal: <value> }
Comportamiento
Si el <value> es un expresión, no evalúa la expresión sino que devuelve la expresión sin$literal analizar.
Ejemplo | Resultado |
|---|---|
|
|
|
|
Ejemplos
Trate a $ como un literal
En una expresión, el signo de dólar se $ evalúa como una ruta de campo; es decir, proporciona acceso al campo. Por ejemplo, la $eq expresión $eq: [
"$price", "$1" ] realiza una comprobación de igualdad entre el valor del campo price y el valor del campo 1 en el documento.
El siguiente ejemplo utiliza una expresión $literal para tratar un string que contiene un signo de dólar "$1" como un valor constante.
Una colección storeInventory tiene los siguientes documentos:
db.storeInventory.insertMany( [ { "_id" : 1, "item" : "napkins", price: "$2.50" }, { "_id" : 2, "item" : "coffee", price: "1" }, { "_id" : 3, "item" : "soap", price: "$1" } ] )
db.storeInventory.aggregate( [ { $project: { costsOneDollar: { $eq: [ "$price", { $literal: "$1" } ] } } } ] )
Esta operación proyecta un campo llamado costsOneDollar que contiene un valor booleano, que indica si el valor del campo price es igual a la cadena "$1":
{ "_id" : 1, "costsOneDollar" : false } { "_id" : 2, "costsOneDollar" : false } { "_id" : 3, "costsOneDollar" : true }
Proyecta un nuevo campo con valor 1
La etapa de $project utiliza la expresión <field>: 1 para incluir el <field> en el resultado. El siguiente ejemplo utiliza el $literal para devolver un nuevo campo configurado con el valor de 1.
Una colección books tiene los siguientes documentos:
db.books.insertMany([ { "_id" : 1, "title" : "Dracula", "condition": "new" }, { "_id" : 2, "title" : "The Little Prince", "condition": "new" } ])
La expresión { $literal: 1 } devuelve un nuevo campo editionNumber con el valor 1:
db.books.aggregate( [ { $project: { "title": 1, "editionNumber": { $literal: 1 } } } ] )
La operación da como resultado los siguientes documentos:
{ "_id" : 1, "title" : "Dracula", "editionNumber" : 1 } { "_id" : 2, "title" : "The Little Prince", "editionNumber" : 1 }