Rails 使用 mongoid_auto_inc 来为你的 mongoid 添加自增字段

rockliu · 2011年12月04日 · 最后由 andyyao 回复于 2014年05月04日 · 6801 次阅读

大部分的人都不太喜欢 mongodb 那一长串 id,都会选择自己去重写 id 为更具亲和力的自增数字。 发现了一个比较好用的 gem,可以帮我们完成这项工作。 使用 auto_increment 来指定自增字段。 详细的用法 github 上有说明: 地址 https://github.com/jffjs/mongoid_auto_inc

额,其实可以用我写这个更佳靠谱些,我这个是直接内部处理用的是 id 字段,你只用在 Gemfile 里面引用,无需做别的操作。用起来就感觉不存在一样

https://github.com/huacnlee/mongoid_auto_increment_id

BTW. Ruby China 目前就在用这个。

#1 楼 @huacnlee 呵呵,刚刚看了一下,华顺兄是是把 id 直接重载掉了,这样做的好处是不用特殊指定字段,直接用就好了(适合于大部分 web 程序了)。但是缺点是不够灵活,比如一个 model 要指定多个自增字段的情况。还有没有指定 id 初始化值的情况,比如,有些要求 id 起始值为 1000 而不是从 1 开始,这个没有参数去指定。

我还在纠结要不要用这个自增 id,既然 mongoid 把这个自增 id 去掉,后来人又要麻烦地把它加上去,不如用 permalink 的 seo 链接

#2 楼 @rockliu 初始化这个可以手动修改一下数据里面的 mongoid.auto_increment_ids 表里面的数据就搞定 此外,我到认为没必要非得从多少多少开始

@huacnlee 在 mongoid 的文档中有一个重写:_id的字段,用的时候不会有冲突吧? For cases when you do not want to have BSON::ObjectId ids, you can override Mongoid's _id field and set them to whatever you like.

class Band
  include Mongoid::Document
  field :name, type: String
  field :_id, type: String, default ->{ name }
end

@cloudaice 用了 mongoid_auto_increment_id 的话,就不要自定义 _id 字段了。

@huacnleerails_admin中设置Referenced 1-n 时,子 collection 的 _id 字段为空值

怎么是亲和力?这个是给机器读得,不是给人读得

undefined method `database' for Mongoid:Module

@huacnlee ,官网上 warning 说这个不能 scale,会带来潜在问题吧?

#10 楼 @lyslim 说的是这么做以后就不能用 Sharding 功能了,对于一般中小型项目来说,也用不上那个的,所以这么做是可行的。

@huacnlee,明白的。不过深想一下,眼下鼓捣的这个东西还用不着,留着以后用 :-)

#12 楼 @lyslim 這個 gem 好像對 mongo 3.0 有 bug。。。現在一般用那個呢

#1 楼 @huacnlee 能不能指定某个表实现主键自增,而不是所有的表都实现?

@sforce100 后来我没用这个功能呢。

有人改了 mongoid_auto_inc,适配了 mongoid 3 以上,哈哈哈 https://github.com/proton/mongoid_auto_increment

需要 登录 后方可回复, 如果你还没有账号请 注册新账号