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

Come si implementa un ID primario a incremento automatico in MongoDB?

Dovrai usare il comando findAndModify di MongoDB. Con esso, puoi selezionare e incrementare in modo atomico un campo.

db.seq.findAndModify({
  query: {"_id": "users"},
  update: {$inc: {"seq":1}},
  new: true
});

Questo incrementerà un contatore per gli users raccolta, che è quindi possibile aggiungere al documento prima dell'inserimento. Dal momento che è atomico, non devi preoccuparti delle condizioni di gara che provocano ID contrastanti.

Non è così semplice come auto_increment di MySQL flag, ma di solito hai anche la possibilità di specificare la tua ID factory nel tuo driver Mongo, in modo da poter implementare una factory che utilizza findAndModify per incrementare e restituire ID in modo trasparente, risultando in un'esperienza molto più simile a MySQL.

Lo svantaggio di questo approccio è che poiché ogni inserto dipende da un blocco di scrittura sulla tua raccolta di sequenze, se stai eseguendo molte scritture, potresti finire per creare colli di bottiglia su quello abbastanza rapidamente. Se vuoi solo assicurarti che i documenti di una raccolta siano ordinati in ordine di inserzione, guarda Raccolte limitate.