sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur implementerar du ett auto-inkrementerande primärt ID i MongoDB?

Du måste använda MongoDB:s findAndModify-kommando. Med den kan du atomiskt välja och öka ett fält.

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

Detta kommer att öka en räknare för users samling, som du sedan kan lägga till i dokumentet innan det infogas. Eftersom det är atomärt behöver du inte oroa dig för rasförhållanden som leder till motstridiga ID:n.

Det är inte lika sömlöst som MySQL:s auto_increment flagga, men du har vanligtvis också möjlighet att ange din egen ID-fabrik i din Mongo-drivrutin, så att du kan implementera en fabrik som använder findAndModify för att öka och returnera ID på ett transparent sätt, vilket resulterar i en mycket mer MySQL-liknande upplevelse.

Nackdelen med detta tillvägagångssätt är att eftersom varje infogning är beroende av ett skrivlås på din sekvenssamling, om du skriver många gånger, kan du hamna i flaskhalsar på det ganska snabbt. Om du bara vill garantera att dokument i en samling sorteras i insättningsordning, titta då på Capped Collections.



  1. Hur släpper jag en MongoDB-databas från kommandoraden?

  2. Hur man tar bort ett element från en dubbelkapslad array i ett MongoDB-dokument.

  3. Hur infogar man ett dokument med datum i mongo?

  4. Mongoose 'statiska' metoder kontra 'instans' metoder