0

我有以下 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
});

这是正确的方法吗?

4

1 回答 1

0

如果您将始终使用所有这 3 个字段进行查询,就像在您的示例中一样,那么是的,这很好。此外,因为您使用了observedAt作为最后一个索引,您也可以sort按该字段,它仍将使用索引进行排序阶段。

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

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

于 2016-10-26T13:03:12.317 回答