MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie implementieren Sie eine automatisch inkrementierende primäre ID in MongoDB?

Sie müssen den findAndModify-Befehl von MongoDB verwenden. Damit können Sie ein Feld atomar auswählen und inkrementieren.

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

Dadurch wird ein Zähler für die users erhöht Sammlung, die Sie dann dem Dokument vor dem Einfügen hinzufügen können. Da es atomar ist, müssen Sie sich keine Gedanken über Rennbedingungen machen, die zu widersprüchlichen IDs führen.

Es ist nicht so nahtlos wie MySQLs auto_increment Flag, aber Sie haben normalerweise auch die Möglichkeit, Ihre eigene ID-Factory in Ihrem Mongo-Treiber anzugeben, sodass Sie eine Factory implementieren könnten, die findAndModify verwendet, um IDs transparent zu erhöhen und zurückzugeben, was zu einer MySQL-ähnlicheren Erfahrung führt.

Der Nachteil dieses Ansatzes besteht darin, dass, da jede Einfügung von einer Schreibsperre für Ihre Sequenzsammlung abhängig ist, Sie bei vielen Schreibvorgängen ziemlich schnell zu einem Engpass führen können. Wenn Sie nur sicherstellen möchten, dass Dokumente in einer Sammlung in der Einfügungsreihenfolge sortiert werden, sehen Sie sich Capped Collections an.