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

Mongo da un error de clave duplicada en el campo _id_ en la aplicación Meteor

Esto no resolverá su problema, pero debería orientarlo en la dirección correcta y tal vez permitirle aislar el problema que puede usar para crear una nueva pregunta:

no hay Solo hay un índice, y tiene un nombre y un descriptor clave. Eso no es lo mismo. El nombre del índice predeterminado es _id_ , su clave es _id .

El _id normalmente se crea del lado del cliente, no del lado del servidor. La pregunta es de dónde vienen esas llaves, porque 2ZGvRfuD8iMvRiXJd ciertamente no es un ObjectId . Esta podría ser una clave de meteorito, o usa alguna clave principal personalizada, pero no sé cómo se generan estas claves. ¿Quizás lo que sea que genere la clave sea susceptible a colisiones?

Sería útil obtener más información al respecto, pero sugeriría formular una nueva pregunta para que la pregunta no crezca demasiado ni se acumule mucha historia.

Ese es un lema de la primera respuesta:no puede eliminar el índice de clave principal obligatorio.

Editar:

Meteor, por defecto, genera ids de una manera diferente a MongoDb . Eso tiene sentido, porque la convención para ObjectId hace probables las colisiones si el número de clientes es grande (es decir, si los clientes no son instancias de servidor, sino navegadores de clientes, de los cuales probablemente haya 2-3 órdenes de magnitud más).

En cambio, Meteor aparentemente usa el método para generar números pseudoaleatorios de manera consistente en cliente y servidor . De manera irritante, la implementación usa un PRNG y recurre a un no generador de números aleatorios deterministas cripto-fuertes (Alea) . En otras palabras, descubrir cómo exactamente sus identificaciones se están generando podría ser complicado porque depende de muchos detalles de su entorno.

Solución alternativa:intente usar ObjectId como clave principal:

Orders= new Meteor.Collection('Orders', {idGeneration: 'MONGO'});