Hace poco vi este error en un conjunto de réplicas de Mongo 2.6:
WARNING: the collection 'mydatabase.somecollection' lacks a unique index on _id. This index is needed for replication to function properly.Asumí que el índice _id sería único por defecto. Pero estoy tratando de verificar / configurarlo. getIndexes muestra que no hay un conjunto de opciones único.
> db.somecollection.getIndexes()[0] { "v" : 1, "key" : { "_id" : 1 }, "ns" : "mydatabase.somecollection", "name" : "_id_" } > db.somecollection.ensureIndex({"_id":1},{unique:true}) > { "numIndexesBefore" : 3, "note" : "all indexes already exist", "ok" : 1 } > db.somecollection.getIndexes()[0] { "v" : 1, "key" : { "_id" : 1 }, "ns" : "mydatabase.somecollection", "name" : "_id_" } He intentado .validate(true) :
... "valid" : true, "errors" : [ ], "ok" : 1 } y también .reIndex() que se ejecuta sin error. No puedo eliminar el índice _id para volver a crearlo. ¿Cómo puedo configurar el índice como único o qué debo hacer para garantizar la coherencia de los datos en el RS? Tenga en cuenta que el RS se actualizó según las instrucciones de actualización de 2.2 --> 2.4 --> 2.6. Descubrí que MongoDB - Collection carece de un índice único en _id, pero no hay nada que resuelva mi problema allí.
He visto esto en el pasado cuando se agregó un nuevo miembro al conjunto de réplicas con una versión de compatibilidad diferente. Ejecute db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } ) en todos sus nodos en el conjunto de réplicas y, si uno es diferente, detenga la replicación en ese nodo, cambie CompatibilityVersion y luego prepárelo para la réplica.
Entonces resulta que el error apareció cuando se agregó un nuevo miembro al conjunto de réplicas existente y solo se mostró en ese miembro. Si me conecto a la base de datos y trato de agregar un _id duplicado, obtengo el E11000 duplicate key error index: ... aunque getIndexes() no indica la restricción única en el índice (suponiendo que sea implícito).