Wat je hier niet lijkt te begrijpen, is dat $exists
kan op geen enkele manier een index "grijpen", zelfs als deze schaars is. Zoals de documentatie zelf zegt:
Het voorbeeld op die pagina's is een { "$exists": false }
vraag. Maar de omgekeerde logische voorwaarde maakt hier geen verschil.
Om het "volledige voordeel" van een "dunne" index te krijgen, moet u rekening houden met het "type" gegevens dat het bevat en de juiste query uitvoeren.
Voor numeriek, zoiets als:
db.collection.find({ "a": "foobar", "b": { "$gte": -9999, "$lte": 9999 } })
Die een index gebruikt, en de schaarse. Of voor op tekst gebaseerde:
db.collection.find({ "a": "foobar", "b": /.+/ })
Die ook de schaarse index zal gebruiken en alleen zal kijken naar die waar "b" is gedefinieerd.
Voor "arrays" dan "wees voorzichtig". Aangezien de waarde waarnaar wordt gekeken waarschijnlijk een van de bovenstaande is, tenzij u dit deed:
db.collection.insert({ "a": 1, "b": [[]] })
Waar is dit dan oké:
db.ab.find({ "a": 1, "b": { "$type": 4 } })
Maar zal de "sparse" index ook niet echt gebruiken om dezelfde redenen $exists
werkt hier niet.
U moet dus begrijpen wat de termen hier betekenen en "op de juiste manier zoeken" om de indexdefinities te gebruiken die u maakt als u de maximale prestaties verwacht.
Dit zijn duidelijke voorbeelden die u zelf kunt testen en ziet dat de resultaten waar zijn. Ik zou willen dat de kerndocumentatie op deze punten duidelijker was, maar ik ben me er ook van bewust dat velen hebben geprobeerd een bijdrage te leveren (en uitstekende uitleg hebben gegeven), maar geen van deze is tot nu toe opgenomen.
Denk dat dat de reden is waarom je het hier vraagt.