سؤال

Please look at the following example. It seems to me that the query should be covered by the index {a: 1}, however explain() gives me an indexOnly: false. What I am doing wrong?

> 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
            ]
        ]
    }
}
هل كانت مفيدة؟

المحلول

Index only denotes a covered query ( http://docs.mongodb.org/manual/applications/indexes/#indexes-covered-queries ) whereby the query and its sort and data can all be found within a single index.

The problem with your query:

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

Is that it must retrieve the full document which means it cannot find all data within the index. Instead you can use:

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

Which will mean you only project the a field which makes the entire query fit into the index, and so indexOnly being true.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top