MongoMapperでautoincrement使いたかったけど、ちょっと悩んだんでメモ。
まずMongoDBに標準で備わってない
MongoMapperというかMongoDBにautoincrementがありません。
でも実現方法は公式にあるのでそれ参照。
http://docs.mongodb.org/manual/tutorial/create-an-auto-incrementing-field/
要はautoincrement用のcollection作ってfindAndModify
コマンドでアトミックにドキュメントを更新してその値を取り出して使用する。って感じです。
これをMongoMapperでやればいいわけですね(´ω`)
findAndModifyがない
MongoMapperにはfindAndModify
コマンドがありませんでした。。。
でもその辺はやっぱり、先駆者様が何とかしていてくれるわけで。
http://jottingsoncomputation.blogspot.jp/2012/08/adding-findandmodify-to-mongomapper-and.html
このplugin使えばfindAndModify
コマンドが使えるわけです。素晴らしいです(´ω`)
いざ、実装
とりあえずサンプルをば。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
|
簡単にですが書きました。
これで’/’にアクセスするたびに、counter_test
dbのMongoTest.counter
collectionのcounter_id
が1増えてその値を返してくれます。実際には別のドキュメントをinsertするときにgetNewSequence
メソッドを使用することでいい感じに動くかと思います。