【发布时间】:2017-11-07 02:10:37
【问题描述】:
我有一个结构如下的集合:
{
"_id" : ObjectId("59d7cd63dc2c91e740afcdb"),
"enrollment" : [
{ "month":-10, "enroll":'00'},
{ "month":-9, "enroll":'00'},
{ "month":-8, "enroll":'01'},
//other months
{ "month":8, "enroll":'11'},
{ "month":9, "enroll":'11'},
{ "month":10, "enroll":'00'}
]
}
我正在尝试运行以下查询:
db.getCollection('collection').find({
"enrollment": {
"$not": {
"$elemMatch": { "month": { "$gte": -2, "$lte": 9 }, "enroll": "00" }
}
}
}).count()
此查询需要 1.6 到 1.9 秒。如果可能的话,我需要把它降到最低,到毫秒。
我尝试在月份和注册字段上创建多键索引。我尝试了各种组合,但查询没有使用任何索引。
我尝试了所有这些组合:
1. { 'enrollment.month':1 }
2. { 'enrollment.month':1 }, { 'enrollment.enroll':1 } -- two seperate indexes
3. { 'enrollment.month':1, 'enrollment.enroll':1}
4. { 'enrollment.enroll':1, 'enrollment.month':1}
解析查询:
查询计划:
非常感谢任何提高性能的建议。
我相当有信心硬件不是问题,但欢迎提出任何建议。
我的数据量不大。它不到1GB。文档总数为 41K,子文档数约为。 1300万
注意:在过去的几天里,我已经发布了几个关于此的问题,但我正试图缩小范围。请不要将此视为我之前问题的重复。
【问题讨论】:
标签: mongodb mongodb-query