I MongoDB, $literal
aggregeringspipeline-operatören returnerar ett värde utan att analysera.
Den accepterar alla giltiga uttryck och returnerar det oparerade uttrycket.
$literal
operatorn kan vara användbar när du har ett värde som MongoDB oavsiktligt skulle kunna tolka som ett uttryck, men du inte vill att det ska göra det.
Till exempel, om du har ett monetärt belopp som inkluderar ett dollartecken, kan MongoDB oavsiktligt tolka det som ett fältnamn. Du kan använda $literal
för att förhindra MongoDB från att tolka sådana uttryck.
Exempel
Anta att vi har en samling som heter test
med följande dokument:
{ "_id" : 1, "name" : "Homer" }
Här är ett exempel på hur du använder $literal
:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 1 ] } } },
{
$project:
{
_id: 0,
interpreted: "$name",
literal: { $literal: "$name" }
}
}
]
)
Resultat:
{ "interpreted" : "Homer", "literal" : "$name" }
I det här exemplet returnerar vi värdet för name
genom att använda $name
att hänvisa till det.
Vi returnerar också det bokstavliga värdet $name
, utan att MongoDB tolkar det som att det betyder name
fält:
Exempel 2
Anta att vår samling innehåller följande dokument:
{ "_id" : 2, "a" : 10, "b" : 5 }
Här är ett annat exempel på hur du använder $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 det här fallet innehåller det första fältet som returneras resultatet av $multiply
operatorn mot a
och b
fält.
Det andra fältet matar helt enkelt ut det bokstavliga värdet som vi gav till $literal
operatör.