2013-02-15 11 views
7

1つのキーが昇順で、2番目のキーが降順である複合インデックスを作成したいとします。Cで複合インデックスを作成する

どうすればいいですか?

私はユーザーが選択したプロパティ名を含む文字列を持っています。そうCreateIndexを代わりに使用する必要があり、

var keys = new IndexKeysBuilder(); 

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

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

答えて

11

動作しません。また、サポート流暢な使用法:IndexKeysIndexOptionsの静的ビルダークラスもあります。

だから、きれいなオプションは次のとおりです。

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

と汎用タイプセーフなオプションのために:ドライバのバージョン2.xで

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

この回答に感謝します。 – user2010435

+1

@ user2010435 - これはあなたのために働いた場合、私はそれが受け入れられたとしてマークすることをお勧めします。 – WiredPrairie

5

EnsureIndexが廃止されました:

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

は、ここに1つの方法だ

3

彼らは完全に道にそう現在、APIを変更複合インデックスを非同期で作成します(これが好ましい):

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

同期して:

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

v2.3(Indexes.CreateMany())で複数のインデックスを作成するにはどうすればよいですか? – Sri