0

次の例を見てください。{a: 1}クエリはインデックスでカバーする必要があるように思えますがexplain()indexOnly: false. 私が間違っていることは何ですか?

> db.foo.save({a: 1, b: 2});
> db.foo.save({a: 2, b: 3});
> db.foo.ensureIndex({a: 1});
> db.foo.find({a: 1}).explain();
{
    "cursor" : "BtreeCursor a_1",
    "nscanned" : 6,
    "nscannedObjects" : 6,
    "n" : 6,
    "millis" : 0,
    "nYields" : 0,
    "nChunkSkips" : 0,
    "isMultiKey" : false,
    "indexOnly" : false,
    "indexBounds" : {
        "a" : [
            [
                1,
                1
            ]
        ]
    }
}
4

1 に答える 1

1

インデックスはカバーされたクエリ ( http://docs.mongodb.org/manual/applications/indexes/#indexes-covered-queries ) のみを示し、クエリとその並べ替えとデータはすべて単一のインデックス内で見つけることができます。

クエリの問題:

db.foo.find({a: 1}).explain();

完全なドキュメントを取得する必要があるということは、インデックス内のすべてのデータを見つけることができないことを意味します。代わりに、次を使用できます。

db.foo.find({a: 1}, {_id:0,a:1}).explain();

aこれは、クエリ全体がインデックスに収まるようにするフィールドのみを射影することを意味し、indexOnly真になります。

于 2013-02-12T08:14:58.743 に答える