MongoDB×PHPでAutoIncrement を実装する
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 }
{ “_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”}
{ “_id” : 1, “title” : “hoge”, “user_id” : 1, “created” : “2015/12/31 11:59:59”}
countersも確認。。
>db.counters.find()
{ “_id” : “itemid”, “seq” : 2 }
{ “_id” : “itemid”, “seq” : 2 }
まとめ
countersコレクションは一つのコレクション以外に itemid以外の名称をつければ、itemコレクション以外にもAutoIncrementは複数設定してあげることができます。