sql >> Base de Datos >  >> NoSQL >> MongoDB

No se puede obtener una consulta cubierta para la colección fragmentada en MongoDB

Como en MongoDB 2.6, no obtendrá una consulta fragmentada completamente cubierta porque hay una consulta adicional para verificar si el fragmento en cuestión posee ese documento (consulte SERVIDOR-5022 en el rastreador de problemas de MongoDB).

Los mongos el enrutador filtra los documentos que se encuentran en un fragmento pero que no deberían vivir allí de acuerdo con los metadatos del clúster fragmentado.

Los documentos pueden existir en más de un fragmento si:

  • Hay una migración de fragmentos en curso:los documentos se copian de un fragmento donante a un fragmento de destino y no se eliminan del fragmento donante hasta que la migración del fragmento se completa con éxito.

  • Los documentos han quedado "huérfanos" en un fragmento como resultado de una migración fallida o una limpieza incompleta. Hay un cleanupOrphaned comando de administrador en MongoDB 2.6 que se puede ejecutar contra un mongod fragmentado para eliminar documentos huérfanos.

Esta limitación de consulta cubierta se indica en los Límites:Consultas cubiertas en clústeres fragmentados sección de la documentación de MongoDB, pero también debe destacarse en el tutorial sobre Creación de consultas cubiertas . He planteado DOCS-3820 para hacer esto más obvio.