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.