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}});