MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment implémentez-vous un ID principal à incrémentation automatique dans MongoDB ?

Vous devrez utiliser la commande findAndModify de MongoDB. Avec lui, vous pouvez sélectionner et incrémenter un champ de manière atomique.

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

Cela incrémentera un compteur pour les users collection, que vous pouvez ensuite ajouter au document avant l'insertion. Comme il est atomique, vous n'avez pas à vous soucier des conditions de concurrence entraînant des ID en conflit.

Ce n'est pas aussi transparent que le auto_increment de MySQL flag, mais vous avez également généralement la possibilité de spécifier votre propre fabrique d'ID dans votre pilote Mongo, vous pouvez donc implémenter une fabrique qui utilise findAndModify pour incrémenter et renvoyer les ID de manière transparente, ce qui donne une expérience beaucoup plus proche de MySQL.

L'inconvénient de cette approche est que, puisque chaque insertion dépend d'un verrou en écriture sur votre collection de séquences, si vous effectuez beaucoup d'écritures, vous risquez de créer un goulot d'étranglement assez rapidement. Si vous souhaitez simplement vous assurer que les documents d'une collection sont triés dans l'ordre d'insertion, consultez Collections limitées.