MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

MongoDB $ letterale

In MongoDB, il $literal l'operatore della pipeline di aggregazione restituisce un valore senza analisi.

Accetta qualsiasi espressione valida e restituisce l'espressione non analizzata.

Il $literal può essere utile quando si dispone di un valore che MongoDB potrebbe inavvertitamente interpretare come un'espressione, ma non lo si desidera.

Ad esempio, se disponi di un importo monetario che include il simbolo del dollaro, MongoDB potrebbe inavvertitamente interpretarlo come un nome di campo. Puoi usare $literal per impedire a MongoDB di interpretare tali espressioni.

Esempio

Supponiamo di avere una collezione chiamata test con il seguente documento:

{ "_id" : 1, "name" : "Homer" }

Ecco un esempio di applicazione di $literal :

db.test.aggregate(
  [
    { $match: { _id: { $in: [ 1 ] } } },
    {
      $project:
        { 
          _id: 0,
          interpreted: "$name",
          literal: { $literal: "$name" }
        }
    }
  ]
)

Risultato:

{ "interpreted" : "Homer", "literal" : "$name" }

In questo esempio, restituiamo il valore del name campo utilizzando $name per riferirsi ad esso.

Restituiamo anche il valore letterale $name , senza che MongoDB lo interpreti per indicare il name campo:

Esempio 2

Supponiamo che la nostra raccolta contenga il seguente documento:

{ "_id" : 2, "a" : 10, "b" : 5 }

Ecco un altro esempio di utilizzo di $literal :

db.test.aggregate(
  [
    { $match: { _id: { $in: [ 2 ] } } },
    {
      $project:
        { 
          _id: 0,
          interpreted: { $multiply: [ "$a", "$b" ] },
          literal: { $literal: { $multiply: [ "$a", "$b" ] } }
        }
    }
  ]
)

Risultato:

{ "interpreted" : 50, "literal" : { "$multiply" : [ "$a", "$b" ] } }

In questo caso, il primo campo restituito contiene il risultato del $multiply operatore contro a e b campi.

Il secondo campo restituisce semplicemente il valore letterale che abbiamo fornito a $literal operatore.