MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB $literal

In MongoDB das $literal Der Aggregations-Pipeline-Operator gibt einen Wert ohne Parsing zurück.

Es akzeptiert jeden gültigen Ausdruck und gibt den ungeparsten Ausdruck zurück.

Das $literal -Operator kann nützlich sein, wenn Sie einen Wert haben, den MongoDB versehentlich als Ausdruck interpretieren könnte, dies aber nicht möchten.

Wenn Sie beispielsweise einen Geldbetrag haben, der ein Dollarzeichen enthält, könnte MongoDB dies versehentlich als Feldnamen interpretieren. Sie können $literal verwenden um zu verhindern, dass MongoDB solche Ausdrücke interpretiert.

Beispiel

Angenommen, wir haben eine Sammlung namens test mit folgendem Dokument:

{ "_id" : 1, "name" : "Homer" }

Hier ist ein Beispiel für die Anwendung von $literal :

db.test.aggregate(
  [
    { $match: { _id: { $in: [ 1 ] } } },
    {
      $project:
        { 
          _id: 0,
          interpreted: "$name",
          literal: { $literal: "$name" }
        }
    }
  ]
)

Ergebnis:

{ "interpreted" : "Homer", "literal" : "$name" }

In diesem Beispiel geben wir den Wert von name zurück Feld mit $name darauf zu verweisen.

Wir geben auch den Literalwert $name zurück , ohne dass MongoDB ihn so interpretiert, dass er den name bedeutet Feld:

Beispiel 2

Angenommen, unsere Sammlung enthält das folgende Dokument:

{ "_id" : 2, "a" : 10, "b" : 5 }

Hier ist ein weiteres Beispiel für die Verwendung von $literal :

db.test.aggregate(
  [
    { $match: { _id: { $in: [ 2 ] } } },
    {
      $project:
        { 
          _id: 0,
          interpreted: { $multiply: [ "$a", "$b" ] },
          literal: { $literal: { $multiply: [ "$a", "$b" ] } }
        }
    }
  ]
)

Ergebnis:

{ "interpreted" : 50, "literal" : { "$multiply" : [ "$a", "$b" ] } }

In diesem Fall enthält das erste zurückgegebene Feld das Ergebnis von $multiply Operator gegen a und b Felder.

Das zweite Feld gibt einfach den Literalwert aus, den wir für $literal bereitgestellt haben Betreiber.