sql >> Database >  >> NoSQL >> MongoDB

Hoe maak je MongoDB MultiKey index op attribuut van items in een array .NET Driver

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

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


  1. Hoe subdocumenten van een object in een array te retourneren met Meteor en MongoDB

  2. Geneste relaties MongoDb

  3. mangoest Zoek met meerdere voorwaarden

  4. Tips voor het upgraden van Percona Server voor MongoDB