【问题标题】:creating a compound index in c#在 C# 中创建复合索引
【发布时间】:2013-02-01 00:29:06
【问题描述】:

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

我该怎么做?

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

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

没用

【问题讨论】:

    标签: c# .net mongodb mongodb-.net-driver compound-index


    【解决方案1】:

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

    【讨论】:

    • v2.3如何创建多个索引(Indexes.CreateMany())?
    • 这里的“Background=true”选项到底有什么作用?
    【解决方案2】:

    这是一种方法:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-07-26
        • 2019-04-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-09
        • 1970-01-01
        相关资源
        最近更新 更多