sql >> Database teknologi >  >> NoSQL >> MongoDB

Sådan opretter du MongoDB MultiKey-indeks på attributten for elementer i en array .NET-driver

Dette er et eksempel på, hvordan man gør det med 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); 

OPDATERING

Med hensyn til indeks inden for arrayet, det nærmeste jeg kunne finde er at bruge "-1" som indeks, når du bygger din indeksnøgle. Som jeg forstår fra github, er kildekoden en gyldig mulighed i tilfælde af bygningsforespørgsler.

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" er en hårdkodet konstant i side-mongodb C#-drivere, hvilket betyder "$" (bevis ). Så denne kode ville forsøge at oprette indeks:

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

hvilket er fint til at forespørge info fra databasen, men ikke tilladt (vil kaste en undtagelse "Indeksnøgle indeholder et ulovligt feltnavn:feltnavn starter med '$'") til brug i indekser. Så jeg antager, at det skal ændres i mongodb-drivere for at få det til at fungere. Noget som "-2" betyder tom operator. I så fald kunne vi bruge

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

hvilket ville generere indeks som:

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

Så dybest set tror jeg ikke, det er muligt lige nu at bygge det indeks, du ønsker med ren Linq uden at ændre mongo C#-drivere.

Så jeg tror, ​​at din eneste mulighed gør sådan her, stadig C#, men uden Linq

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


  1. Tilknytning af en BsonArray til en liste<> i en POCO

  2. ruby resque uden læsseskinner miljø

  3. Avanceret databasestyring:ClusterControl - Vejledningen

  4. Få en optælling af samlede dokumenter med MongoDB, når du bruger limit