MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak utworzyć indeks MongoDB MultiKey na atrybucie elementów w tablicy .NET Driver

Oto przykład, jak to zrobić za pomocą 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); 

AKTUALIZUJ

Jeśli chodzi o indeks w tablicy, najbliżej tego, co udało mi się znaleźć, jest użycie "-1" jako indeksu podczas budowania klucza indeksu. Jak rozumiem z kodu źródłowego github jest to poprawna opcja w przypadku budowania zapytań.

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” to zakodowana stała w bocznych sterownikach mongodb C#, co oznacza „$” (dowód ). Więc ten kod próbowałby utworzyć indeks:

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

co jest dobre dla zapytań o informacje z bazy danych, ale niedozwolone (zgłosi wyjątek "Klucz indeksu zawiera nieprawidłową nazwę pola:nazwa pola zaczyna się od '$'") do użycia w indeksach. Więc zakładam, że należy to zmienić w sterownikach mongodb, aby działało. Coś w rodzaju „-2” oznacza pusty operator. W takim przypadku moglibyśmy użyć

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

który wygenerowałby indeks taki jak:

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

Więc zasadniczo nie sądzę, aby w tej chwili możliwe było zbudowanie pożądanego indeksu za pomocą czystego Linqa bez zmiany sterowników mongo C#.

Więc myślę, że twoja jedyna opcja to zrobić tak, nadal C#, ale bez Linq

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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongo czeka na 27017 nawet po ponownej instalacji

  2. Strumienie Mongo Change uruchamiane wiele razy (tak jakby):aplikacja Node działająca w wielu instancjach

  3. Mongodb aktualizuje głęboko zagnieżdżony subdokument

  4. Radzenie sobie ze zmianami schematu w Mongoose

  5. MongoDB $stdDevPop