MongoDB рубиновые даты - PullRequest
       9

MongoDB рубиновые даты

4 голосов
/ 17 апреля 2010

У меня есть коллекция с индексом: create_at (которая в данном конкретном случае должна быть датой)

Как правильно сохранить запись и получить ее по дате?

Я пытаюсь что-то вроде:

Модель: поле: creation_at,: type => Time

сценарий:

Col.create (: созданный_кат => Time.parse (еще один_модель.созданный_кат).

и

Col.find (: все,: условия => {: made_at => Time.parse (тоже самое)})

и ничего не возвращается

Ответы [ 2 ]

3 голосов
/ 24 ноября 2010

Драйвер Mongo и различные ORM отлично справляются с объектами Date, Time и DateTime; нет смысла приводить их к строкам.

Col.create(:created_at => another_model.created_at)

И находка:

Col.all(:created_at => another_model.created_at)

Вы не хотите устанавливать строки, потому что даты хранятся внутри как объекты даты BSON, индексируются и ищутся как таковые. Если вы сохраните их как строки, вы не сможете эффективно выполнять такие сравнения, как сравнение больше / меньше / диапазона.

1 голос
/ 24 ноября 2010
Col.create(:created_at => Time.parse(another_model.created_at).to_s)

Эта строка передаст ваш объект времени в виде строки, снимите to_s, чтобы отправить его на слой синтаксического анализа типов в вашем ORM (MongoMapper или Mongoid) как объект Time. Это единственная ошибка, которую я вижу, которая может привести к тому, что она не будет работать.

...