MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB $ littéral

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.