MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

MongoDB $literal


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.