Come in MongoDB 2.6, non otterrai una query partizionata completamente coperta perché esiste una query aggiuntiva per verificare se lo shard in questione possiede quel documento (vedi SERVER-5022 nel tracker dei problemi di MongoDB).
I mongos router filtra i documenti che si trovano su uno shard ma che non dovrebbero risiedere lì in base ai metadati del cluster sharded.
I documenti possono esistere su più di uno shard se:
-
Esiste una migrazione di blocchi in corso:i documenti vengono copiati da uno shard donatore a uno shard di destinazione e non vengono rimossi dallo shard donatore fino al completamento della migrazione del blocco.
-
I documenti sono rimasti "orfani" su uno shard a causa di una migrazione non riuscita o di una pulizia incompleta. Esiste un
cleanupOrphanedcomando amministratore in MongoDB 2.6 che può essere eseguito su unmongodsuddiviso in partizioni per eliminare i documenti orfani.
Questa limitazione delle query coperte è annotata nei Limiti:Query coperte nei cluster partizionati sezione della documentazione di MongoDB, ma dovrebbe anche essere evidenziato nel tutorial su Creazione di query coperte . Ho sollevato DOCS-3820 per renderlo più ovvio.