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

Jak vytvořit MongoDB MultiKey index na atributu položek v poli .NET Driver

Toto je příklad, jak to udělat s C#

var indexDefinition = Builders<FooDocument>.IndexKeys.Combine(
    Builders<FooDocument>.IndexKeys.Ascending(f => f.Key1),
    Builders<FooDocument>.IndexKeys.Ascending(f => f.Key2));

await collection.Indexes.CreateOneAsync(indexDefinition); 

AKTUALIZACE

Pokud jde o index v poli, nejbližší to, co jsem byl schopen najít, je použít "-1" jako index při vytváření indexového klíče. Jak jsem pochopil ze zdrojového kódu githubu, je to platná možnost v případě dotazů na vytváření.

var indexDefinition = Builders<FooDocument>.IndexKeys.Combine(
    Builders<FooDocument>.IndexKeys.Ascending(f => f.Key1),
    Builders<FooDocument>.IndexKeys.Ascending(f => f.Key2[-1].Key));

await collection.Indexes.CreateOneAsync(indexDefinition); 

"-1" je pevně zakódovaná konstanta v postranních mongodb C# ovladačích, což znamená "$" (důkaz ). Tento kód by se tedy pokusil vytvořit index:

{ "Key1": 1, "Key2.$.Key": 1 }

což je v pořádku pro dotazování na informace z databáze, ale není povoleno (vyvolá výjimku „Klíč indexu obsahuje neplatný název pole:název pole začíná '$'“) pro použití v indexech. Takže předpokládám, že by se to mělo změnit v ovladačích mongodb, aby to fungovalo. Něco jako "-2" znamená prázdný operátor. V tom případě bychom mohli použít

var indexDefinition = Builders<FooDocument>.IndexKeys.Combine(
    Builders<FooDocument>.IndexKeys.Ascending(f => f.Key1),
    Builders<FooDocument>.IndexKeys.Ascending(f => f.Key2[-2].Key));

await collection.Indexes.CreateOneAsync(indexDefinition); 

což by vygenerovalo index jako:

{ "Key1": 1, "Key2.Key": 1 }

V zásadě si tedy nemyslím, že je nyní možné vytvořit požadovaný index s čistým Linq bez změny ovladačů mongo C#.

Takže si myslím, že vaše jediná možnost je takto, stále C#, ale bez Linq

await collection.Indexes.CreateOneAsync(new BsonDocument {{"name", 1}, {"bars.key", 1}});


  1. MongoRepository JSON Date Query (jaro)

  2. pomocí mapy do mezipaměti pro přibližně 5000 záznamů v aplikaci Javascript VS Redis

  3. Sdílená kolekce mezi klientem a serverem Meteor

  4. Co je nového v MongoDB 4.2