Creo que un índice disperso es la respuesta a esto, aunque se necesita de una índice para cada campo. http://www.mongodb.org/display/DOCS/Indexes#Indexes-SparseIndexes
Los índices dispersos deberían ayudar con $ exists: consultas verdaderas.
Aún así, si su campo no es realmente escaso (lo que significa que está configurado en su mayoría), no lo ayudará mucho.
Actualización Supongo que estoy equivocado. Parece que hay un problema abierto (https://jira.mongodb.org/browse/SERVER-4187) aún que $ existe no usa índices dispersos. Sin embargo, se puede hacer algo como esto con el hallazgo y tipo, que parece que correctamente utiliza el índice disperso:
db.ent.find({}).sort({a:1});
He aquí una demostración completa de la diferencia, usando sus valores de ejemplo:
> db.ent.insert({'a':5775, 'b':'b1'})
> db.ent.insert({'c':'its a c', 'b':'b2'})
> db.ent.insert({'a':7557, 'c':'its a c'})
> db.ent.ensureIndex({a:1},{sparse:true});
Tenga en cuenta que find({}).sort({a:1})
utiliza el índice (BtreeCursor):
> db.ent.find({}).sort({a:1}).explain();
{
"cursor" : "BtreeCursor a_1",
"nscanned" : 2,
"nscannedObjects" : 2,
"n" : 2,
"millis" : 0,
"nYields" : 0,
"nChunkSkips" : 0,
"isMultiKey" : false,
"indexOnly" : false,
"indexBounds" : {
"a" : [
[
{
"$minElement" : 1
},
{
"$maxElement" : 1
}
]
]
}
}
Y find({a:{$exists:true}})
realiza un escaneo completo:
> db.ent.find({a:{$exists:true}}).explain();
{
"cursor" : "BasicCursor",
"nscanned" : 3,
"nscannedObjects" : 3,
"n" : 2,
"millis" : 0,
"nYields" : 0,
"nChunkSkips" : 0,
"isMultiKey" : false,
"indexOnly" : false,
"indexBounds" : {
}
}
Parece que también puede usar .hint ({a: 1}) para obligarlo a usar el índice.
> db.ent.find().hint({a:1}).explain();
{
"cursor" : "BtreeCursor a_1",
"nscanned" : 2,
"nscannedObjects" : 2,
"n" : 2,
"millis" : 0,
"nYields" : 0,
"nChunkSkips" : 0,
"isMultiKey" : false,
"indexOnly" : false,
"indexBounds" : {
"a" : [
[
{
"$minElement" : 1
},
{
"$maxElement" : 1
}
]
]
}
}
vistazo a: http://www.mongodb.org/display/DOCS/Using+Multikeys+to+Simulate+a+Large+Number+of+ Índices – Dewfy