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

Określ wiele kryteriów dla elementów tablicy

Aby zrozumieć, co mówi dokumentacja, najpierw musisz zrozumieć, jak działa zapytanie zakresowe z tablicą.

Załóżmy, że w swojej kolekcji masz następujący dokument:

{ "finished" : [ 27, 3 ] },
{ "finished" : 17 }

Pierwsze zapytanie:

db.users.find( { "finished": { "$elemMatch": { "$gt": 15, "$lt": 20 } } } )

Zwróci tylko dokument, w którym „zakończono” jest tablicą. Dzieje się tak, ponieważ $elemMatch operator dopasowuje tylko dokumenty, w których pole jest tablicą i gdzie pojedynczy element spełnia wszystkie kryteria zapytania.

Ale drugie pytanie:

db.users.find( { "finished": { "$gt": 15, "$lt": 20 } } )

zwróci oba dokumenty, co prawdopodobnie nie jest tym, czego chcesz jako 27 jest większe niż 20 i 3 jest mniejsza niż 15 . Dzieje się tak, ponieważ 27 spełnia pierwsze kryteria i 3 drugi. To zachowanie jest opisane w dokumentacji.

...jeden element może spełniać warunek większy niż 15, a inny element mniej niż 20, lub jeden element może spełniać oba:

Wniosek:

Zapytania zakresowe względem tablic będą pasować do jednego lub wielu elementów w tablicy, które spełniają wszystkie kryteria zapytania.

Lekcja:

Nie używaj zapytań o zakres z tablicami. Otrzymasz nieoczekiwany wynik.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Zainicjuj dane na zadokowanym mongo

  2. MongoDB $anyElementTrue

  3. Skonfiguruj logowanie dla sterownika MongoDB Java

  4. meteor:jak mogę wykonać kopię zapasową mojej bazy danych mongo

  5. TypeError:ObjectId ('') nie jest możliwy do serializacji w formacie JSON