Dit is een voorbeeld van hoe je het moet doen met 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);
UPDATE
Wat betreft de index binnen de array, het dichtst bij wat ik kon vinden, is om "-1" als index te gebruiken bij het bouwen van uw indexsleutel. Zoals ik begrijp uit de github-broncode is dit een geldige optie in het geval van het bouwen van query's.
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" is een hardgecodeerde constante in side mongodb C#-stuurprogramma's, wat "$" betekent (bewijs ). Dus deze code zou proberen een index te maken:
{ "Key1": 1, "Key2.$.Key": 1 }
wat prima is voor het opvragen van informatie uit de database, maar niet toegestaan (zal een uitzondering veroorzaken "Indexsleutel bevat een ongeldige veldnaam:veldnaam begint met '$'") om te gebruiken in indexen. Dus ik neem aan dat het in mongodb-stuurprogramma's moet worden gewijzigd om het te laten werken. Iets als "-2" betekent lege operator. In dat geval zouden we
. kunnen gebruikenvar 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);
die een index zou genereren zoals:
{ "Key1": 1, "Key2.Key": 1 }
Dus in principe denk ik niet dat het op dit moment mogelijk is om de gewenste index te bouwen met pure Linq zonder de Mongo C#-stuurprogramma's te wijzigen.
Dus ik denk dat je enige optie dit doet, nog steeds C# maar zonder Linq
await collection.Indexes.CreateOneAsync(new BsonDocument {{"name", 1}, {"bars.key", 1}});