MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Mongo fornisce un errore di chiave duplicata sul campo _id_ nell'applicazione Meteor

Questo non risolverà il tuo problema, ma dovrebbe indirizzarti nella giusta direzione e forse consentirti di isolare il problema che puoi utilizzare per creare una nuova domanda:

Non c'è. C'è solo un indice e ha un nome e un descrittore chiave. Non è la stessa cosa. Il nome dell'indice predefinito è _id_ , la sua chiave è _id .

Il _id viene normalmente creato lato client, non lato server. La domanda è da dove provengono quelle chiavi, perché 2ZGvRfuD8iMvRiXJd non è certamente un ObjectId . Questa potrebbe essere una chiave meteorica o usi una chiave primaria personalizzata, ma non so come vengono generate queste chiavi. Forse qualunque cosa generi la chiave è suscettibile di collisioni?

Maggiori informazioni al riguardo sarebbero utili, ma suggerirei di formulare una nuova domanda in modo che la domanda non diventi troppo grande o non abbia molta cronologia.

Questo è un lemma della prima risposta:non puoi eliminare l'indice di chiave primaria obbligatorio.

Modifica:

Meteor, per impostazione predefinita, genera ID in un modo diverso da MongoDb . Questo ha senso, perché la convenzione per ObjectId rende probabili collisioni se il numero di client è elevato (cioè se i client non sono istanze server, ma browser client, di cui probabilmente ci sono 2-3 ordini di grandezza in più).

Invece, Meteor apparentemente utilizza il metodo per generare costantemente numeri pseudo-casuali su client e server . Irritantemente, l'implementazione utilizza un PRNG e ricade su un non generatore di numeri casuali deterministico cripto-forte (Alea) . In altre parole, scoprire come esattamente i tuoi ID vengono generati potrebbe essere complicato perché dipende da molti dettagli del tuo ambiente.

Soluzione alternativa:prova a utilizzare ObjectId come chiave primaria:

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