sql >> Database >  >> NoSQL >> MongoDB

Hoe implementeer je een automatisch oplopende primaire ID in MongoDB?

U moet de opdracht findAndModify van MongoDB gebruiken. Hiermee kunt u atomair een veld selecteren en verhogen.

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

Dit verhoogt een teller voor de users verzameling, die u vervolgens aan het document kunt toevoegen voordat u deze invoegt. Omdat het atomair is, hoef je je geen zorgen te maken over race-omstandigheden die resulteren in conflicterende ID's.

Het is niet zo naadloos als MySQL's auto_increment vlag, maar je hebt meestal ook de mogelijkheid om je eigen ID-fabriek op te geven in je Mongo-stuurprogramma, zodat je een fabriek kunt implementeren die findAndModify gebruikt om ID's transparant te verhogen en terug te sturen, wat resulteert in een veel meer MySQL-achtige ervaring.

Het nadeel van deze aanpak is dat, aangezien elke invoeging afhankelijk is van een schrijfvergrendeling op je reeksverzameling, je als je veel schrijft, daar vrij snel een bottleneck in zou kunnen krijgen. Als je alleen maar wilt garanderen dat documenten in een collectie in invoegvolgorde worden gesorteerd, kijk dan bij Capped Collections.



  1. MongoDb:Voordeel van het gebruik van ObjectID versus een string met een ID?

  2. Is er een insluitbaar Java-alternatief voor Redis?

  3. Hoe krijg ik een bijgewerkt document terug van de findOneAndUpdate-methode?

  4. hoe geef je een variabele door aan een regex