MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

MongoDB:Używanie dopasowania ze zmiennymi dokumentu wejściowego

Czy to oznacza, że ​​jeśli używasz zmiennych wejściowych w $lookuppipeline, musisz użyć $expr

Tak poprawnie, domyślnie w filtrach tj.; w części filtrującej .find() lub w $match etap agregacji, nie możesz użyć istniejącego pola w dokumencie.

Jeśli w ogóle, jeśli chcesz użyć istniejącej wartości pola w filtrze zapytania, musisz użyć potoku agregacji, więc aby użyć potoku agregacji w .find() lub w $match musisz otoczyć zapytanie filtrujące $expr. Ten sam sposób dostępu do zmiennych lokalnych został utworzony za pomocą let z $lookup filtruj w $match musi być opakowany przez $expr .

Rozważmy poniższy przykład:

Przykładowe dokumenty:

[
  {
    "key": 1,
    "value": 2
  },
  {
    "key": 2,
    "value": 4
  },
  {
    "key": 5,
    "value": 5
  }
]

Zapytanie:

 db.collection.find({ key: { $gt: 1 }, value: { $gt: 4 } })

    Or

 db.collection.aggregate([ { $match: { key: { $gt: 1 }, value: { $gt: 4 } } } ])

Test: plac zabaw dla mongo

Jeśli zobaczysz powyższe zapytanie, wprowadź jednocześnie 1 &4 są przekazywane do zapytania, ale sprawdzasz poniżej zapytanie, w którym próbujesz dopasować key pole ==value pole - nie działa :

db.collection.aggregate([ { $match: { key: { $eq: "$value" } } } ])

Test: plac zabaw dla mongo

Powyżej, gdy porównujesz dwa istniejące pola, nie możesz tego zrobić, ponieważ oznacza to, że sprawdzasz dokumenty za pomocą key wartość pola jako ciąg "$value" . Powiedzieć, że nie jest to ciąg znaków, to w rzeczywistości odwołanie do value w polu musisz użyć operatora agregacji $eq zamiast operatora zapytania $eq, jak poniżej:

 db.collection.aggregate([ { $match: { $expr: { $eq: [ "$key", "$value" ] } } } ])

Test: plac zabaw dla mongo



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak wyczyścić konsolę w MongoDB

  2. Jaki jest pożytek z pliku mongo.lock?

  3. Wybierz rekordy pasujące do wartości concat dwóch pól w mongodb

  4. php mongodb znajdź n-ty wpis w kolekcji

  5. Jak utworzyć indeks o określonej nazwie w MongoDB?