Каков наилучший способ форматирования даты в JSON для хранения БД Mongo - PullRequest
4 голосов
/ 01 апреля 2010

У меня свидание со временем. Я использую ruby, но язык не должен иметь значения.

d = "2010-04-01 13:00:00"

Как лучше всего отформатировать эту дату для БД Монго? Под «лучшим» я имею в виду, есть ли определенный формат, который я мог бы использовать, чтобы Mongo распознал его как дату и мог бы дать мне более продвинутые оптоны фильтрации?

т.е.: если правильно отформатирован, могу ли я попросить Монго вернуть все записи, чей месяц равен «04»?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 01 апреля 2010

Вам вообще не нужно форматировать даты; даты являются поддерживаемым типом данных. Каждый драйвер клиента должен поддерживать даты через их стандартный тип даты, включая ruby ​​one .

Для сложных запросов, таких как ваш пример, вы можете использовать выражение javascript для спецификатора поиска:

{"$where": "this.date.getMonth() == 3"}
1 голос
/ 08 апреля 2010

В ruby ​​вы должны использовать экземпляр Time, который будет храниться как тип даты и времени BSON. Вы можете использовать предложение $ where, как упоминает Coady, но будет лучше выполнить запрос диапазона с накладными расходами $ lt и $ gt и использовать индекс.

0 голосов
/ 28 декабря 2010

Мне не нравится полагаться на объекты Mongo Date. Я думаю, что Mongo медленнее с объектами 'date', чем с другими типами данных (такими как целые числа).

Я, как правило, использую целые числа (если вам нужен часовой пояс, тоже есть поле tz, значит вы локализовали время):

document = {:some_timestamp => Time.now.to_i}
@collection.find({'some_timestamp' => {'$gte' => Time.now.to_i}})

Иногда я просто использую метку времени, встроенную в BSON :: ObjectId:

id = BSON::ObjectId.from_time(Time.now)
@collection.find({'_id' => {'$lte' => id}})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...