2013-06-24 2 views
1

Я новичок в MongoDB и Mongoid, используя Mongoid 3.1.4 для моих Rails (3.2.13). Я видел в устаревшем коде люди, использующие как type: Moped::BSON::ObjectId, так и type: String где-то для ссылочной модели.Мопед :: BSON :: ObjectId или String для идентификатора родителя в моделях Rails?

Пример

class Team 
    include Mongoid::Document 

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

    ... 
end 

(Использование git blame я знаю, эти 2 строки, написанные на 2 разных людей)

Я сделал поиск, но не нашел ответа на вопрос, когда/почему использовать то, что тип? String или Moped::BSON::ObjectId

Спасибо,

ответ

4

И немного странно, вы обычно делают отношения вместо того, чтобы хранить идентификатор непосредственно либо в виде строки или ObjectId:

class Team 
    include Mongoid::Document 

    belongs_to :room 
    belongs_to :leader 

    ... 
end 

Это также позволит вы можете напрямую прочитать идентификатор, вызвав room_id или leader_id. Для получения дополнительной информации ознакомьтесь с http://mongoid.org/en/mongoid/docs/relations.html или http://two.mongoid.org/docs/relations.html

Если мне придется выбирать между ними, я бы хранить ObjectId вместо строки, хотя, это занимает меньше места для хранения.

+2

Хранение ObjectId также позволяет избежать большого беспорядка бессмысленности преобразования типов при запросе вещей. ObjectIds и строки часто выглядят одинаково, но это не так; иногда Mongoid преобразует строки в ObjectIds для вас, иногда это не будет. –