MongoDB×PHPでAutoIncrement を実装する ITかあさん

ITかあさん

MongoDB×PHPでAutoIncrement を実装する

mongoDB

MongoでMySQLのような AutoIncrement は実装できるか!できます!

mongoに新しくレコードが追加されるたびにuuidが追加されるので、識別するには困らないですが管理ようにAutoIncrement で数値で管理したい場合もありますねー。そんな時にはAutoIncrement 用の counter用のコレクションを追加してあげましょう。結構簡単にできました。

mongo コマンド

db.counters.insert({“_id”:”itemid”, “seq”:new NumberLong(1)});

これで、 counters コレクションにitem のAutoIncrementが保存されるドキュメントが作成されました

作成されたドキュメント

>db.counters.find()
{ “_id” : “itemid”, “seq” : 1 }

シーケンス番号発行するClass


MongoCollection::findAndModify
findAndModifyを使いって、countersのseqを取得。さらにseqに1をセットで次の連番に備える。

新規ドキュメント追加の際、 現在の item IDを調べてセット


countersから現在のitemidのseqを取得してセットするだけ。
こんな感じで”_id”に連番が入ります。

db.items.find();
{ “_id” : 1, “title” : “hoge”, “user_id” : 1, “created” : “2015/12/31 11:59:59”}

countersも確認。。

>db.counters.find()
{ “_id” : “itemid”, “seq” : 2 }

まとめ

countersコレクションは一つのコレクション以外に itemid以外の名称をつければ、itemコレクション以外にもAutoIncrementは複数設定してあげることができます。

初夏のJavaScript祭 in サーキュレーションビル ForPro