我有以下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"和command = "b"
对于3个字段(observer, mandate, observedAt)的复合索引是否有最佳实践方法?
今天,我这样做:
schema.index({
mandate: 1,
observer: 1,
observedAt: -1
});
这条路对吗?
如果您总是使用所有这3个字段进行查询,就像您的示例一样,那么是的,这很好。同样,因为您使用observedAt
作为最后一个索引,您也可以通过该字段sort
,并且它仍将在排序阶段使用索引。
但是如果你的查询可以改变使用更少或更多的字段,所以它可能不是最好的选择。在这里阅读更多关于它的内容,特别是查看示例
https://docs.mongodb.com/manual/core/index-compound/