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

Indeksowanie Mongo na tablicach obiektów a obiekty

Zapytania będą z pewnością dużo prostsze w drugim przypadku, gdzie 'groups' to tablica dokumentów podrzędnych, każdy z 'id' i 'name'.

Mongo nie obsługuje zapytań "wildcard", więc jeśli twoje dokumenty były ustrukturyzowane w pierwszej kolejności i chciałbyś znaleźć poddokument o wartości "hi", ale nie wiedziałeś, że klucz to 152, nie będziesz w stanie Zrób to. Dzięki drugiej strukturze dokumentu możesz łatwo zapytać o {"groups.name":"hi"}.

Więcej informacji na temat zapytań dotyczących osadzonych obiektów można znaleźć w dokumentacji zatytułowanej „Notacja kropkowa (dot. obiektów)” http://www.mongodb.org/display/DOCS/Dot+Notation+%28Reaching+into+Objects%29 Przydatne są również sekcje „Wartość w tablicy” i „Wartość w obiekcie osadzonym” w dokumentacji „Zaawansowane zapytania”:http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-ValueinanArray

W przypadku indeksu {'groups.id':1} wpis indeksu zostanie utworzony dla każdego klucza „id” w każdej tablicy „groups” w każdym dokumencie. W przypadku indeksu „grupy” w jednym dokumencie zostanie utworzony tylko jeden wpis indeksu.

Jeśli masz dokumenty drugiego typu i indeks grup, twoje zapytania będą musiały pasować do całych poddokumentów, aby móc skorzystać z indeksu. Na przykład, biorąc pod uwagę dokument:

{ "_id" : 1, "groups" : [ { "id" : 152, "name" : "hi" }, { "id" : 111, "name" : "group2" } ] }

Zapytanie

db.<collectionName>.find({groups:{ "id" : 152, "name" : "hi" }}) 

skorzysta z indeksu, ale zapytania

db.<collectionName>.find({"groups":{$elemMatch:{name:"hi"}}})

lub

db.<collectionName>.find({"groups.name":"hi"})

nie będzie.

Tworzone indeksy powinny zależeć od najczęściej wykonywanych zapytań.

Za pomocą polecenia .explain() możesz poeksperymentować, z jakimi (jeśli w ogóle) indeksami są używane Twoje zapytania. http://www.mongodb.org/display/DOCS/Explain Pierwsza linia, "kursor", powie Ci, który indeks jest używany. "cursor" :"BasicCursor" wskazuje, że wykonywane jest pełne skanowanie kolekcji.

Więcej informacji na temat indeksowania można znaleźć w dokumentacji:http://www.mongodb.org/display /DOCS/Indeksy

Sekcja „Indexing Array Elements” w powyższych linkach do dokumentu zatytułowanego „Multikeys”:http://www.mongodb.org/display/DOCS/Multikeys

Mamy nadzieję, że poprawi to twoje zrozumienie, jak wykonywać zapytania dotyczące osadzonych dokumentów i jak używane są indeksy. Daj nam znać, jeśli masz dodatkowe pytania!




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak znaleźć 5 najlepszych wartości w mongodb ? i nie powinien zawierać tej samej wartości

  2. Numeryczna nazwa kolekcji Usuń

  3. Sprawdź, czy ktoś ma urodziny w ciągu najbliższych 30 dni z mongo

  4. Zainstaluj MongoDB Community Edition 4.0 w systemie Linux

  5. Napisz swojego pierwszego doradcę