In MongoDB, de $literal
aggregatiepijplijnoperator retourneert een waarde zonder te ontleden.
Het accepteert elke geldige uitdrukking en retourneert de niet-geparseerde uitdrukking.
De $literal
operator kan handig zijn als je een waarde hebt die MongoDB per ongeluk kan interpreteren als een uitdrukking, maar je wilt dat niet.
Als u bijvoorbeeld een geldbedrag heeft dat een dollarteken bevat, kan MongoDB dat per ongeluk interpreteren als een veldnaam. U kunt $literal
. gebruiken om te voorkomen dat MongoDB dergelijke uitdrukkingen interpreteert.
Voorbeeld
Stel dat we een verzameling hebben met de naam test
met het volgende document:
{ "_id" : 1, "name" : "Homer" }
Hier is een voorbeeld van het toepassen van $literal
:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 1 ] } } },
{
$project:
{
_id: 0,
interpreted: "$name",
literal: { $literal: "$name" }
}
}
]
)
Resultaat:
{ "interpreted" : "Homer", "literal" : "$name" }
In dit voorbeeld retourneren we de waarde van de name
veld met behulp van $name
ernaar te verwijzen.
We retourneren ook de letterlijke waarde $name
, zonder dat MongoDB het interpreteert als de name
veld:
Voorbeeld 2
Stel dat onze collectie het volgende document bevat:
{ "_id" : 2, "a" : 10, "b" : 5 }
Hier is nog een voorbeeld van het gebruik van $literal
:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 2 ] } } },
{
$project:
{
_id: 0,
interpreted: { $multiply: [ "$a", "$b" ] },
literal: { $literal: { $multiply: [ "$a", "$b" ] } }
}
}
]
)
Resultaat:
{ "interpreted" : 50, "literal" : { "$multiply" : [ "$a", "$b" ] } }
In dit geval bevat het eerste geretourneerde veld het resultaat van de $multiply
operator tegen de a
en b
velden.
Het tweede veld geeft gewoon de letterlijke waarde weer die we hebben gegeven aan de $literal
telefoniste.