MongoDB:"Where"-Select 上的复合索引

MongoDB: Compound Indexes on a "Where"-Select

我有以下 MongoDB 架构:

  mandate: {
    type: mongo.Schema.Types.ObjectId,
    ref: 'Mandate',
    required: true
  },
  observer: {
    type: mongo.Schema.Types.ObjectId,
    ref: 'Observer',
    required: true
  },
  value: {
    type: Number,
    required: true
  },
  observedAt: {
    type: Date,
    required: true
  }

此集合包含大量数据。

我通过以下方式索取数据: 给我所有数据 2015 年至 2016 年间观察到的 在哪里 观察者 = "a" 和 授权 = "b"

是否有针对 3 个字段(观察者、授权、观察点)的复合索引的最佳实践方法?

今天,我这样做:

schema.index({
  mandate: 1,
  observer: 1,
  observedAt: -1
});

这是正确的方法吗?

如果您总是查询所有这 3 个字段,就像在您的示例中一样,那么是的,这很好。另外因为您使用 observedAt 作为最后一个索引,您也可以按该字段 sort 并且它仍然会在排序阶段使用索引。

但是,如果您的查询可以使用更少或更多字段进行更改,那么它可能不是最佳选择。在这里阅读更多相关信息,特别是查看示例

https://docs.mongodb.com/manual/core/index-compound/