0

MongoDB には、postTime:-1 にインデックスを付けた次の単純なクエリがあります。コレクションには 100,237 のドキュメントがあります。Explain() は、クエリがインデックスによって完全にカバーされていることを示しています。

nScannedObjects が 100,237 なのはなぜですか? また、最初の 5 つの結果だけに関心があるにもかかわらず、クエリ時間は 455 ミリ秒です。

私は何か間違ったことをしていますか、それともこれがMongoDBの仕組みですか? インデックス付きクエリに時間がかかる理由を誰か説明できますか?

ありがとう:)レス

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"
}
4

1 に答える 1

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 構文が正しく機能しない理由はわかりませんが、これらのアプローチのいずれかで解決するはずです。

于 2013-05-31T20:57:05.133 に答える