2013-02-15 4 views
7

Chcę utworzyć indeks złożony, w którym jeden klucz powinien znajdować się w rosnącej kolejności, a drugi w kolejności malejącej.Tworzenie indeksu złożonego w C#

Jak mogę to zrobić?

Mam ciąg znaków zawierający nazwy właściwości wybranych przez użytkownika.

collection.EnsureIndex(IndexKeys.Descending(selectedProperties[0]), 
       IndexKeys.Ascending(selectedProperties[1])), 
IndexOptions....... 

nie działa

Odpowiedz

11

Oto jeden ze sposobów:

var keys = new IndexKeysBuilder(); 

keys.Ascending(keyName1); 
keys.Descending(keyName2); 

var options = new IndexOptionsBuilder(); 
options.SetSparse(true); 
options.SetUnique(false); 
collection.EnsureIndex(keys, options); 
+0

dzięki za tę odpowiedź. – user2010435

+1

@ user2010435 - jeśli to zadziałało dla ciebie, sugerowałbym oznaczenie go jako zaakceptowanego. – WiredPrairie

5

EnsureIndex jest już nieaktualne, więc CreateIndex powinien być stosowany zamiast. Istnieją również statyczne klasy konstruktora, które używają płynnie: IndexKeys i IndexOptions.

Więc najczystsze opcja:

collection.CreateIndex(
    IndexKeys.Ascending(keyName1).Descending(keyName2), 
    IndexOptions.SetSparse(true).SetUnique(false)); 

A dla typu rodzajowego bezpieczna opcja:

collection.CreateIndex(
    IndexKeys<Document>.Ascending(d => d.Property1).Descending(d => d.Property2), 
    IndexOptions.SetSparse(true).SetUnique(false)); 
3

W wersji 2.x kierowcy one całkowicie zmienił API więc obecnie sposobem Utwórz asynchronicznie indeks złożony (który jest preferowany) to:

await collection.Indexes.CreateOneAsync(
    Builders<Hamster>.IndexKeys.Ascending(_ => _.Name).Descending(_ => _.Age), 
    new CreateIndexOptions { Background = true }); 

I synchronicznie:

collection.Indexes.CreateOne(
    Builders<Hamster>.IndexKeys.Ascending(_ => _.Name).Descending(_ => _.Age), 
    new CreateIndexOptions { Sparse = true }); 
+0

Jak utworzyć więcej niż jeden indeks w v2.3 (Indexes.CreateMany())? – Sri