2
 Mongoid.master.collection("seq").find_and_modify({
   :query  => {:_id   => self.class.name},
   :update => {'$inc' => {:next => 1}},
   :new    => true,
   :upsert => true
})["next"]

它在 mongoid 2.4.9 中运行良好,但是当我使用 mongoid 3.0.0 时,出现错误

NoMethodError in PostsController#new

undefined method `master' for Mongoid:Module

Mongoid 3.0.0 不支持 Mongoid.master ?

4

1 回答 1

3

由于 Mongoid 3.0.0 是用 Moped 代替 Mongo Ruby Driver,所以旧的 API 不能调用。

你可以试试这个:

Mongoid::Sessions.default.command({:findAndModify => "seq",
                                         :query  => { :_id => self.class.name },
                                         :update => { "$inc" => { :next => 1 } },
                                         :upsert => true,
                                         :new    => true })

你可以使用这个 Gem 来做自动递增 id 功能: https ://github.com/huacnlee/mongoid_auto_increment_id

于 2012-05-29T05:14:14.257 回答