使用Rails 3的一个MongoDB集合中的两个“id”字段?

时间:2011-10-11 22:58:51

标签: ruby-on-rails-3 mongodb mongoid

我使用最新版本的MongoDB和Mongoid 2.2获得了一个Rails 3.0.9项目。

我将一个带有“id”字段的CSV导入名为College的MongoDB集合中,产生如下集合:

{ "_id" : ObjectID("abc123"), "id" : ######, ... }

观察:

  1. show动作导致使用ObjectID的URL
  2. 在index.html.erb中显示'college.id'会显示ObjectID
  3. 问题:

    1. 如何使用原始“id”字段作为参数
    2. MongoDB保留“id”,这意味着我需要重命名“id”字段 大学收藏(也许是“代码”) - 如果是这样,怎么样?
    3. 谢谢!

      更新

      答案:

      db.colleges.update( { "name" : { $exists : true } } , { $rename : { "id" : "code" } }, false, true )
      

      我使用“名字”,因为那是我可以检查存在的字段。

1 个答案:

答案 0 :(得分:2)

_id是MongoDB中的保留和必需属性 - 我认为mongoid将id映射到_id,因为这是有道理的。可能有一种方法可以通过mongoid访问id属性,但我认为你最好将id列重命名为其他东西以避免将来混淆。

{ $rename : { old_field_name : new_field_name } }

将重命名文档中的字段名称(mongo 1.7.2 +)。

所以

db.college.update({ "_id" : { $exists : true }}, { $rename : { 'id' : 'code' } }, false, true);

应更新该集合中的每条记录,并将id字段重命名为code。

(显然在运行任何重要数据之前对此进行测试)