sql >> Databáze >  >> NoSQL >> MongoDB

Mongo indexování na objektových polích vs

Dotazování bude jistě mnohem snazší v druhém případě, kde 'skupiny' je pole dílčích dokumentů, z nichž každý má 'id' a 'jméno'.

Mongo nepodporuje „wildcard“ dotazy, takže pokud byly vaše dokumenty strukturovány prvním způsobem a chtěli byste najít dílčí dokument s hodnotou „hi“, ale nevěděli jste, že klíč byl 152, nebyli byste schopni Udělej to. S druhou strukturou dokumentu se můžete snadno dotazovat na {"groups.name":"hi"}.

Další informace o dotazování na vložené objekty naleznete v dokumentaci s názvem „Dot Notation (Reaching into Objects)“ http://www.mongodb.org/display/DOCS/Dot+Notation+%28Reaching+into+Objects%29 Užitečné jsou také sekce „Hodnota v poli“ a „Hodnota ve vloženém objektu“ v dokumentaci „Pokročilé dotazy“:http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-ValueinanArray

Pro index na {'groups.id':1} bude vytvořen záznam rejstříku pro každý klíč "id" v každém poli "groups" v každém dokumentu. S rejstříkem na "skupinách" bude vytvořena pouze jedna položka rejstříku na dokument.

Pokud máte dokumenty druhého typu a index na skupinách, vaše dotazy se budou muset shodovat s celými dílčími dokumenty, aby bylo možné index použít. Například vzhledem k dokumentu:

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

Dotaz

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

bude používat index, ale dotazy

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

nebo

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

nebude.

Indexy, které vytvoříte, by měly záviset na tom, jaké dotazy budete nejčastěji provádět.

Pomocí příkazu .explain() můžete experimentovat s tím, které (pokud nějaké) indexy používají vaše dotazy. http://www.mongodb.org/display/DOCS/Explain První řádek, "kurzor", vám řekne, který index se používá. "cursor" :"BasicCursor" znamená, že se provádí úplné skenování kolekce.

Další informace o indexování jsou v dokumentaci:http://www.mongodb.org/display /DOCS/Indexy

Část "Indexing Array Elements" výše odkazuje na dokument s názvem "Multikeys":http://www.mongodb.org/display/DOCS/Multikeys

Doufejme, že to zlepší vaše porozumění tomu, jak se dotazovat na vložené dokumenty a jak se používají indexy. Pokud máte nějaké doplňující otázky, dejte nám vědět!




  1. Je možné použít projekci dotazu na stejnou kolekci, která má projekci $elemMatch?

  2. Použití Redis Object Cache k urychlení instalace WordPressu

  3. Chyba při spuštění mongo image - docker-entrypoint.sh:řádek 381

  4. Potřebuji mangoose s graphql?