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

Hvordan implementerer du et primært ID med automatisk stigning i MongoDB?

Du skal bruge MongoDBs findAndModify-kommando. Med den kan du atomisk vælge og øge et felt.

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

Dette vil øge en tæller for users samling, som du så kan tilføje til dokumentet inden indsættelse. Da det er atomart, behøver du ikke bekymre dig om raceforhold, der resulterer i modstridende ID'er.

Det er ikke så problemfrit som MySQL's auto_increment flag, men du har normalt også mulighed for at angive din egen ID-fabrik i din Mongo-driver, så du kan implementere en fabrik, der bruger findAndModify til at øge og returnere ID'er transparent, hvilket resulterer i en meget mere MySQL-lignende oplevelse.

Ulempen ved denne tilgang er, at da hver indsættelse er afhængig af en skrivelås på din sekvenssamling, hvis du laver mange skrivninger, kan du ende med at få flaskehalse på det ret hurtigt. Hvis du bare vil garantere, at dokumenter i en samling er sorteret i indsættelsesrækkefølge, så kig på Afgrænsede samlinger.



  1. Én publikation skjuler indlejrede felter fra en anden publikation

  2. MongoDB - Fejl:kommandoen getMore mislykkedes:Markøren blev ikke fundet

  3. Kan ikke bruge mongo-kommando, viser kommando ikke fundet på mac

  4. Mongoose.js:Find bruger efter brugernavn LIKE værdi