Дата в монгоидных запросах - PullRequest
6 голосов
/ 24 марта 2012

У меня есть модель:

class SimpleAction
  include Mongoid::Document
  field :set_date, :type => Date

, и у меня есть некоторые данные в коллекции:

{"_id": ObjectId ("4f6dd2e83a698b2518000006"), "name":"lost", "notes": "", "set_date (1i)": "2012", "set_date (2i)": "3", "set_date (3i)": "25", "set_date (4i)": "13", "set_date (5i)": "57", "duration": 15, "todo": "4"}

Вы можете увидеть эту дату хранения mongoid в пяти полях- set_date (ni).

У меня два вопроса:

  • Как я могу отфильтровать данные по полю set_date в консольном клиенте mongo?Примерно так:

    db.simple_actions.find({ set_date : { "$lte" : new Date() } })
    

    Мой запрос не вернул никаких данных.

  • Как я могу отфильтровать данные по полю set_date в моем контроллере Rails?Примерно так:

    @simple_actions = SimpleAction.where(:set_date => { '$lte' => Date.today })
    

Ответы [ 2 ]

14 голосов
/ 24 марта 2012

Я бы рекомендовал не использовать Date, но вместо этого DateTime:

field :set_date, :type => DateTime

Теперь он будет храниться не только в 1 поле, например:

"set_date" : ISODate("2012-03-14T17:42:27Z")

Но Mongoid будет правильно обрабатывать различные преобразования для запросов, которые вы хотите:

SimpleAction.where( :set_date => { :$lte => Date.today } )
0 голосов
/ 26 декабря 2016

Вы можете использовать его с классом Time.

Rails так хорош с Api для мобильных устройств (например, Android), когда вы отправляете дату с мобильного телефона на Api, например: 1482723520. (last_created = 1482723520)

Вы можете использовать это так:

 time = Time.at(params[:last_created].to_i)

А в Rails вы можете запросить так:

Number.where(created_at:  { :$gte => time })
...