mongodb / mongoose 中的部分索引

Posted

技术标签:

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

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

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

Partial 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。

【讨论】:

以上是关于mongodb / mongoose 中的部分索引的主要内容,如果未能解决你的问题,请参考以下文章

E11000 mongodb mongoose 中的重复键错误索引

E11000 mongodb mongoose 中的重复键错误索引

E11000 mongodb mongoose 中的重复键错误索引

如何使用 mongoose 从 mongodb 模式中删除索引?

唯一索引不适用于 Mongoose / MongoDB

MongoDB/Mongoose 索引使查询更快还是变慢?