Dans MongoDB, le $literal
l'opérateur de pipeline d'agrégation renvoie une valeur sans analyse.
Il accepte toute expression valide et renvoie l'expression non analysée.
Le $literal
L'opérateur peut être utile lorsque vous avez une valeur que MongoDB pourrait interpréter par inadvertance comme une expression, mais que vous ne le souhaitez pas.
Par exemple, si vous avez un montant monétaire qui comprend un signe dollar, MongoDB peut l'interpréter par inadvertance comme un nom de champ. Vous pouvez utiliser $literal
pour empêcher MongoDB d'interpréter de telles expressions.
Exemple
Supposons que nous ayons une collection appelée test
avec le document suivant :
{ "_id" : 1, "name" : "Homer" }
Voici un exemple d'application de $literal
:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 1 ] } } },
{
$project:
{
_id: 0,
interpreted: "$name",
literal: { $literal: "$name" }
}
}
]
)
Résultat :
{ "interpreted" : "Homer", "literal" : "$name" }
Dans cet exemple, nous renvoyons la valeur du name
champ en utilisant $name
pour s'y référer.
Nous renvoyons également la valeur littérale $name
, sans que MongoDB l'interprète comme signifiant le name
champ :
Exemple 2
Supposons que notre collection contienne le document suivant :
{ "_id" : 2, "a" : 10, "b" : 5 }
Voici un autre exemple d'utilisation de $literal
:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 2 ] } } },
{
$project:
{
_id: 0,
interpreted: { $multiply: [ "$a", "$b" ] },
literal: { $literal: { $multiply: [ "$a", "$b" ] } }
}
}
]
)
Résultat :
{ "interpreted" : 50, "literal" : { "$multiply" : [ "$a", "$b" ] } }
Dans ce cas, le premier champ retourné contient le résultat du $multiply
opérateur contre le a
et b
champs.
Le deuxième champ affiche simplement la valeur littérale que nous avons fournie au $literal
opérateur.