【问题标题】:Mongoose discriminator and indexesMongoose 鉴别器和索引
【发布时间】:2020-02-21 16:24:58
【问题描述】:

如果我使用discriminator key mongoose 设置模型,则会自动为所有查询添加鉴别键。

但如果我将某些键定义为index: true,则创建的索引不会以鉴别键为前缀。相反,它们是具有单个键的简单索引。

这不是最理想的吗?不是所有索引都应该是 discriminatorKey(例如__t)和我要索引的键的复合索引吗?

如果是,我应该而不是defining indexes at the path level(通过index: true)更喜欢这样设置它们:

Event.index({ __t: 1, type: 1 });

【问题讨论】:

  • 不一定。 QueryPlanner 分析您的查询以检查哪种索引组合更适合执行您的查询(检查自己:db.event.find({__t:"foo", type:"bar"}).explain())。因此添加__t 不会改变您的查询性能。

标签: mongodb mongoose mongoose-schema mongodb-indexes


【解决方案1】:

不,它不是次优的。鉴别器键使猫鼬了解您正在使用的模式/模型,并在例如时自动为您创建一个实例。一个查询回来了。 Mongoose 不知道如何您将使用该附加键(也许您想查询 所有您的类型以获取特定值?或者您想创建一个唯一索引在所有类型的名称上?),因此通过路径值创建“基本”索引只是按照您的描述进行,它只是创建一个索引。

如果您有这些被强链接的用例,您可以创建compound indexsparse indexes

【讨论】:

  • 感谢您的回答。因此,您可以确认,出于性能原因,如果我确实有一个它们是强链接的用例(比如总是只查询单个鉴别器类型,而不是所有类型),那么手动创建复合索引是否有意义?
  • 是的!但它总是更安全to see what mongodb is doing under the hood with your index,看看你的索引是否正确
猜你喜欢
  • 1970-01-01
  • 2017-02-12
  • 2017-08-16
  • 1970-01-01
  • 2021-08-23
  • 1970-01-01
  • 2021-04-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多