Mongoid/MongoDBでauto increment
Auto Increment with MongoDBより、Mongoid/MongoDBでMySQLのauto incrementみたいなことをする方法。
連番を保持するためのCollectionを用意して、新しくDocumentを作る際にそれをfind_and_modifyで1増加させるという方法をとる。 find_and_modifyを使うので、MongoDBは1.3.0以上、Mongoidは2.2.0以上が必要になる。
まずは連番を保持するためのCollectionを用意する。
class Seq
include Mongoid::Document
field :collection, type: String
field :seq, type: Integer
end
auto increment的なことがしたいCollectionではbefore_validateのタイミングでSeqから採番する。
class User
include Mongoid::Document
field :name, type: String
field :seq, type: Integer, default: 0
before_create :set_seq
private
def set_seq
self.seq = Seq.collection.find_and_modify(
query: { "collection" => "users" },
update: { "$inc" => { "seq" => 1 } },
new: true
)["seq"]
end
end
連番Collection別に連番を保持するためのDocumentは事前に用意しておく必要があるので忘れずに。
Seq.create(collection: "users", seq: 0)