sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDB $ literal

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.