所以,我使用MongoDB 3.6来存储我的数据。集合架构如下所示。
{
enabled: Boolean,
opening_hours: {
0: [{
from: Number,
until: Number
}],
1: [{
from: Number,
until: Number
}],
...
6: [{
from: Number,
until: Number
}],
},
opening_exceptions: [{
from: Date,
until: Date
}],
opening_whitelist: [{
from: Date,
until: Date
}],
category: String,
payment_methods: [String]
}
我的查询如下所示:
{
"enabled":true,
"$or":[{
"opening_hours.5": {
"$elemMatch": {
"from": { "$lte":698 },
"until": { "$gte":698 }
}
}
}, {
"opening_whitelist": {
"$elemMatch": {
"from": { "$lte":new Date(1525444711573) },
"until": { "$gte":new Date(1525444711573) }
}
}
}],
"opening_exceptions": {
"$not": {
"$elemMatch": {
"from": { "$lte":new Date(1525444711573) },
"until": { "$gte":new Date(1525444711573) }
}
}
},
"category": { $in: ["Tecno"] },
"payment_methods": { $in: ["visa"] }
}
category
和payment_methods
字段有时会出现在查询中以及$or
和opening_exceptions
。
此查询需要尽可能快地运行,因此我正在尝试索引集合。我已经阅读了大多数有关索引的MongoDB文档(复合索引,利用索引交集的多索引)。但是,MongoDB不支持并行数组索引(由于多种原因),即使我尝试为查询的每个组合创建索引,Mongo似乎也没有利用(看到cursor.explain()
输出)足够的指数。
有关如何索引此集合以获得最佳查询效果的任何想法?
可能在架构中添加一些元数据以使其可索引?
谢谢!