2011-10-11 51 views
1

我有一个使用最新版本的MongoDB和Mongoid 2.2的Rails 3.0.9项目。Rails 3在一个MongoDB集合中的两个“id”字段?

我导入的CSV与“ID”字段到一个名为学院MongoDB的集合,产生一个集合中,像这样:

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

观察:

  1. 演出动作导致一个网址利用ObjectID
  2. 在index.html.erb中显示'college.id'显示ObjectID

问题:

  1. 如何使用原来的“ID”字段作为参数
  2. 为“ID”,由MongoDB的保留,这意味着我需要 学院集合中重命名“ID”字段(也许是为了“编码”) - 如果是这样,怎么办?

谢谢!

更新

答:

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

我用 “名”,因为这是一个领域,我可以检查是否存在。

回答

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字段重命名为代码。

+0

更新命令需要一个附加的闭括号}(在任何重要的数据运行之前明显测试此),但即使有了它,蒙戈控制台返回一个语法错误:'无效的属性ID(壳):1 ' – Adam

+0

也许它与'db.collection.update(criteria,objNew,upsert,multi)'的upsert和多部分有关?我不知道。我不知道这些部件在功能上做了什么。 – Adam

+0

集合名称被复数化为'db.colleges.update({“name”:{$ exists:true}},{$ rename:{“id”:“code”}},false,true);'我用“名字”,因为那是另一个领域,我可以检查存在,但基本上 - 你是对的!非常感谢! – Adam

相关问题