Moped :: BSON :: ObjectId或Rails模型中父ID的字符串?

Gia*_*yen 2 ruby-on-rails relationship mongoid objectid

我是MongoDB和Mongoid的新手,Mongoid 3.1.4用于我的Rails(3.2.13)应用程序.我在遗留代码中看到人们使用两者type: Moped::BSON::ObjectIdtype: String某处的参考模型.

class Team
  include Mongoid::Document

  field :room_id, type: String
  field :leader_id, type: Moped::BSON::ObjectId

  ...
end
Run Code Online (Sandbox Code Playgroud)

(使用git blame我知道由2个不同的人写的这两行)

我做了一个搜索,但没有找到问题的答案何时/为什么使用什么类型?String要么Moped::BSON::ObjectId

谢谢,

小智 5

两者都有点奇怪,你通常建立关系而不是直接将id存储为字符串或ObjectId:

class Team
  include Mongoid::Document

  belongs_to :room
  belongs_to :leader

  ...
end
Run Code Online (Sandbox Code Playgroud)

这也允许您通过调用room_id或leader_id直接读取id.有关详细信息,请访问http://mongoid.org/en/mongoid/docs/relations.htmlhttp://two.mongoid.org/docs/relations.html

如果我必须在两者之间做出选择,我会存储ObjectId而不是字符串,但它占用的存储空间更少.

  • 在查询内容时,存储ObjectId还可以避免大量的类型转换废话.ObjectIds和字符串通常看起来一样,但它们不是; 有时Mongoid会为你转换字符串到ObjectIds,有时它不会. (3认同)