在C#中创建复合索引

15

我想创建一个复合索引,其中一个键应按升序排序,第二个键按降序排序。

我该如何做到这一点?

我有一个包含用户选择的属性名称的字符串。

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

无法正常工作

4个回答

15
在驱动程序的v2.x版本中,他们完全改变了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 });

1
如何在 v2.3 中创建多个索引(Indexes.CreateMany())? - Sri Chatala
这里的“Background=true”选项确切地是做什么的? - Venkatesh Dharavath

11

以下是一种方式:

var keys = new IndexKeysBuilder();

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

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

6

EnsureIndex 已过时,应使用 CreateIndex。还有一些支持流畅用法的静态构建器类:IndexKeysIndexOptions

因此,最干净的选项是:

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

针对通用的类型安全选项:

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

-1

使用CreateIndex创建索引

var indexModel = new CreateIndexModel<T>(keys.Ascending(x => x.Property1).Ascending(x=>x.Property2));
                
collection.Indexes.CreateOne(indexModel);

谢谢您的回答,aadreja。您能否添加一些文字来解释为什么这是最佳答案,或者它是如何工作的? - Sasha Kondrashov
@SashaKondrashov - collection.CreateIndex使用索引键已经过时 (http://mongodb.github.io/mongo-csharp-driver/2.9/apidocs/html/M_MongoDB_Driver_IMongoIndexManager_1_CreateOne_2.htm)。 - aadreja

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接