sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur man skapar MongoDB MultiKey-index på attribut för objekt i en array .NET-drivrutin

Detta är ett exempel på hur 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); 

UPPDATERA

När det gäller index inom arrayen, det närmaste jag kunde hitta är att använda "-1" som index när du bygger din indexnyckel. Som jag förstår från github är källkoden ett giltigt alternativ vid byggnadsfrågor.

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" är en hårdkodad konstant i mongodb C#-drivrutiner som betyder "$" (bevis ). Så den här koden skulle försöka skapa index:

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

vilket är bra för att söka information från databasen, men inte tillåtet (kommer att ge ett undantag "Indexnyckel innehåller ett olagligt fältnamn:fältnamnet börjar med '$'") att använda i index. Så jag antar att det borde ändras i mongodb-drivrutiner för att det ska fungera. Något som "-2" betyder tom operator. I så fall skulle vi kunna använda

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

vilket skulle generera index som:

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

Så i grund och botten tror jag inte att det är möjligt just nu att bygga index du vill ha med ren Linq utan att byta mongo C#-drivrutiner.

Så jag tror att ditt enda alternativ gör så här, fortfarande C# men utan Linq

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


  1. Vad är MongoDBs strikta läge och är det en bra idé att använda?

  2. Få alla fältnamn i en mongodb-samling?

  3. Hur kan jag bläddra/visa värdena lagrade i Redis

  4. MongoDB:påverkar dokumentstorleken frågeprestanda?