Los índices , y no solo aceleran consultas: también controlan qué documentos participan y, en el caso unique, protegen una regla de unicidad bajo concurrencia.
La semántica de unique con null y campos ausentes puede sorprender. Un single-field unique index puede limitar cuántos documentos tienen null/missing según cómo se generan las claves.
Si el campo es optional y solo debe ser unique cuando existe, un partial unique index suele expresar mejor la intención.
Puede permitir múltiples documentos sin campo, mientras protege valores presentes según semántica exacta. Debes probar null, missing y tipos reales; no asumir equivalencia entre “ausente” y “no indexado”.
La query debe usar collation compatible para aprovecharlo. Para emails, además de collation debes definir una normalización de dominio; las reglas de email no son idénticas a lowercase genérico.
Unique multikey tiene semántica especial y no garantiza que dos elementos dentro del mismo array no compartan una propiedad. Para relaciones, una colección de asociación suele ofrecer una regla más clara.
En colecciones sharded, unique indexes tienen requisitos relacionados con la shard key. Verifica las reglas de la versión y el diseño antes de asumir unicidad global.
Una regla que no puede protegerse globalmente con el índice elegido puede necesitar cambiar shard key o modelado.
Para índices de rendimiento puedes probar hidden. Para unique, no puedes “probar” la garantía de la misma forma: introducirla requiere limpiar datos y coordinar writers.
Estrategia:
auditar duplicados;
desplegar writers compatibles;
crear índice;
monitorear duplicate key;
retirar comprobaciones redundantes solo si mantienen mensajes útiles.
Unique es una garantía concurrente; partial define un subconjunto explícito y sparse omite principalmente campos ausentes. La combinación correcta refleja scope, lifecycle y tipos del dominio. La aplicación debe manejar conflictos sin sustituir la garantía del servidor.