MongoDBのfindAndModifyコマンドを使用する必要があります。これを使用すると、フィールドをアトミックに選択してインクリメントできます。
db.seq.findAndModify({
query: {"_id": "users"},
update: {$inc: {"seq":1}},
new: true
});
これにより、users
のカウンターがインクリメントされます コレクション。挿入する前にドキュメントに追加できます。アトミックであるため、競合状態によってIDが競合することを心配する必要はありません。
MySQLのauto_increment
ほどシームレスではありません フラグを立てますが、通常はMongoドライバーで独自のIDファクトリを指定するオプションもあるため、findAndModifyを使用してIDを透過的にインクリメントおよび返すファクトリを実装すると、MySQLのようなエクスペリエンスが大幅に向上します。
このアプローチの欠点は、すべての挿入がシーケンスコレクションの書き込みロックに依存しているため、大量の書き込みを行うと、すぐにボトルネックになる可能性があることです。コレクション内のドキュメントが挿入順に並べ替えられることを保証したいだけの場合は、上限付きコレクションを確認してください。