这个查询语句的explain结果中cursor显示的是BasicCursor,表示没有使用索引,所以查询需要扫描整个FQ_POLICY集合。扫描整个集合需要把集合中所有的文档都读入到内存中,是特别费时的操作。
我调整了一下这个查询语句的结构,应该可以使用表索引了,您可以在测试环境里试试下面这个查询:
db.FQ_POLICY.find({
"status" : 3,
"auditstatus" : 1,
"tickettype" : {
"$in" : [
1,
3
]
},
"departureairport" : {
"$in" : [
{
"$regex" : "SHA"
},
"###"
]
},
"arrivalairport" : {
"$in" : [
{
"$regex" : "PEK"
},
"###"
]
},
"workweekday" : {
"$in" : [
{
"$regex" : "1"
},
""
]
},
"policynum" : {
"$gt" : 3
},
"flightsdatestamp" : {
"$lte" : 1378569600000
},
"flightedatestamp" : {
"$gte" : 1378569600000
},
"sworktimestamp" : {
"$lte" : 2820000
},
"eworktimestamp" : {
"$gte" : 2820000
}
}
)