I MongoDB er $literal
aggregeringspipeline-operator returnerer en værdi uden parsing.
Det accepterer ethvert gyldigt udtryk og returnerer det uparserede udtryk.
$literal
operator kan være nyttig, når du har en værdi, som MongoDB utilsigtet kunne fortolke som et udtryk, men du ikke vil have det.
For eksempel, hvis du har et pengebeløb, der inkluderer et dollartegn, kan MongoDB utilsigtet fortolke det som et feltnavn. Du kan bruge $literal
for at forhindre MongoDB i at fortolke sådanne udtryk.
Eksempel
Antag, at vi har en samling kaldet test
med følgende dokument:
{ "_id" : 1, "name" : "Homer" }
Her er et eksempel på anvendelse af $literal
:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 1 ] } } },
{
$project:
{
_id: 0,
interpreted: "$name",
literal: { $literal: "$name" }
}
}
]
)
Resultat:
{ "interpreted" : "Homer", "literal" : "$name" }
I dette eksempel returnerer vi værdien af name
felt ved at bruge $name
at henvise til det.
Vi returnerer også den bogstavelige værdi $name
, uden at MongoDB fortolker det til at betyde name
felt:
Eksempel 2
Antag, at vores samling indeholder følgende dokument:
{ "_id" : 2, "a" : 10, "b" : 5 }
Her er endnu et eksempel på brug af $literal
:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 2 ] } } },
{
$project:
{
_id: 0,
interpreted: { $multiply: [ "$a", "$b" ] },
literal: { $literal: { $multiply: [ "$a", "$b" ] } }
}
}
]
)
Resultat:
{ "interpreted" : 50, "literal" : { "$multiply" : [ "$a", "$b" ] } }
I dette tilfælde indeholder det første returnerede felt resultatet af $multiply
operator mod a
og b
felter.
Det andet felt udsender simpelthen den bogstavelige værdi, som vi har givet til $literal
operatør.