新手问题 http://ruby-china.org/topics/3707 类似这样的 URL,这个 ID 怎么对应 mongodb 里的_id

yzhrain · 2012年06月16日 · 最后由 huacnlee 回复于 2012年06月18日 · 3509 次阅读

Ruby China 里的一段代码不太理解

# PostsController#show
  def show
    @post = Post.find(params[:id])
    @post.hits.incr
    set_seo_meta("#{@post.title}")
    drop_breadcrumb("文章")
    drop_breadcrumb t("common.read")
  end

我看 Ruby China 的链接是这样的方式: http://ruby-china.org/topics/3707 但是 mongodb 的 document 的 id 不是这样的么: { "_id" : ObjectId("4d3ed089fb60ab534684b7e9") }

看了一下源代码没发现是怎么样对应起来的,而且 Ruby China 的代码跟使用 ActiveRecord 的代码基本上没有什么不同。

一楼正解

多谢两位了。

#2 楼 @huacnlee 这个 gem 好象和 https://github.com/goncalossilva/mongoid-sequence 差不多啊,有什么不同么?

#4 楼 @fsword 那个是自定义一个字段来搞的,而原始的 ObjectId 还是在的 我那个是直接全自动的代替,覆盖 _id 字段

#5 楼 @huacnlee 像把 _id 覆盖掉,使用自增式 ID,岂不是不能使用 mongodb 分布式的特性了,我看书里说 _id 在多个节点都能保持唯一的,用了自增式 ID 后,应该就不能保持这个特性了。

#6 楼 @yzhrain mongoid_auto_increment_id 应该是去查询 documents 中的最大 id 再加 1 返回的,所以理论上在 replica set 或 sharding 中都不会有影响。

#7 楼 @ashchan 不是的,而是维护了一张 counter 表,最大 id +1 的方式会出现重复的问题。

#6 楼 @yzhrain 当初这个这么设计就没考虑用 Sharding 功能,所以如果你的应用需要用上 Sharding 的话,那这个就不要用了,还是继续保持原始的 ObjectId

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