在c#中创建一个复合索引



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

我该怎么做?

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

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

不工作

在驱动程序的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 });

这里有一种方法:

var keys = new IndexKeysBuilder();
keys.Ascending(keyName1);
keys.Descending(keyName2);
var options = new IndexOptionsBuilder();
options.SetSparse(true);
options.SetUnique(false);
collection.EnsureIndex(keys, options);

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

使用创建索引

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

相关内容

  • 没有找到相关文章

最新更新