在MongoDB中,我有以下简单查询,postTime上的索引:-1。该系列有100,237份文件。 explain()表示查询完全由索引覆盖。
为什么nScannedObjects是100,237?此外,即使我只对前5个结果感兴趣,查询时间也是455毫秒。
我做错了什么,或者这是MongoDB的工作方式?有人可以解释为什么索引查询需要这么长时间吗?
谢谢:) Les
db.guestBookPost.find({ postTime : {$gte : 0}, $orderby : { "postTime" : -1}}, {_id:0, >postTime:1}).limit(5).explain()
{
"cursor" : "BtreeCursor postTime_-1",
"isMultiKey" : false,
"n" : 0,
"nscannedObjects" : 100237,
"nscanned" : 100237,
"nscannedObjectsAllPlans" : 200474,
"nscannedAllPlans" : 200474,
"scanAndOrder" : false,
"indexOnly" : true,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 455,
"indexBounds" : {
"postTime" : [
[
1.7976931348623157e+308,
0
]
]
},
"server" : "ip-10-245-26-151:27017"
}
答案 0 :(得分:0)
使用$orderby
语法似乎是导致它的原因。您可以使用:
db.guestBookPost.
find({ postTime : {$gte : 0}}, {_id:0, >postTime:1}).
sort({postTime: -1}).
limit(5).
explain()
或者:
db.guestBookPost.
find({ postTime : {$gte : 0}}, {_id:0, >postTime:1}).
_addSpecial("$orderBy", {postTime: -1}).
limit(5).
explain()
它会正常工作。我不确定为什么$ orderby语法不能正常工作,但这些方法中的任何一种都应该解决它。