【问题标题】:Partial indexes in mongodb / mongoosemongodb / mongoose 中的部分索引
【发布时间】:2016-05-04 01:37:44
【问题描述】:

在稀疏索引文档中我发现了关于 mongodb 3.2 部分索引的注释

3.2 版更改:从 MongoDB 3.2 开始,MongoDB 提供 创建部分索引的选项。部分索引提供了一个超集 稀疏索引的功能。如果您使用的是 MongoDB 3.2 或 以后,部分索引应该优先于稀疏索引。

Partial indexes 非常有帮助,我想在我的项目中使用它们。是否可以将它们与猫鼬一起使用?

【问题讨论】:

    标签: node.js mongodb indexing mongoose mongodb-indexes


    【解决方案1】:

    在当前的 Mongoose 4.3.7 版本中,您无法在方案中定义部分索引,但您仍然可以使用 MongoDB 3.2 的部分索引。

    您只需使用本机驱动程序创建索引。

    // ScheduleModel is a Mongoose Model
    ScheduleModel.collection.createIndex({"type" : 1 } , {background:true , partialFilterExpression : { type :"g" }} , function(err , result){
         console.log(err , result);
    });
    

    之后,每个与partialFilterExpression 匹配的查询都会被编入索引。

    【讨论】:

      【解决方案2】:

      现在可以通过 Mongoose +4.6.1 原生实现

      Book.index({user: 1, author: 1, complete: 1}, {unique: true, partialFilterExpression: {complete: true}});
      

      【讨论】:

      • @Alendorff 没有。我认为它没有的原因是因为 Mongoose 将命令分派给数据库引擎,所以 Mongoose 与它无关。但恕我直言,它应该。一些研究将引导您发现在 Mongoose 中使用此功能的问题:github.com/Automattic/mongoose/… 确认这是可能的。
      【解决方案3】:

      对于 Mongoid 用户:

      index(
        { user_id: 1, author_id: 1, complete: 1 },
        background: true,
        partial_filter_expression:
          {
            complete: { :$eq => true }
          }
      )
      

      找不到任何文档,但 this PR

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-29
        • 2014-05-28
        • 2018-01-19
        相关资源
        最近更新 更多