Как мне сравнить даты из данных Twitter, хранящихся в MongoDB, через PyMongo?

Являются ли даты, хранящиеся в полях «created_at», маршалированными в объекты даты и времени Python через PyMongo, или мне нужно вручную заменить текстовые строки объектами даты Python? то есть

Как преобразовать свойство в MongoDB из текста в тип даты?

Кажется крайне неестественным, что мне придется заменить строки даты объектами даты Python, поэтому я задаю вопрос.

Я хотел бы написать запросы, которые отображают твиты за последние три дня. Пожалуйста, дайте мне знать, если есть изящный способ сделать это. Спасибо!


person vgoklani    schedule 11.01.2012    source источник
comment
Вероятно, зависит от используемых вами сопоставлений. Можете ли вы просто проверить в базе данных, что в конечном итоге там написано?   -  person Thilo    schedule 11.01.2012


Ответы (2)


вы можете проанализировать временные метки Twitter created_at в дату и время Python следующим образом:

import datetime, pymongo
created_at = 'Mon Jun 8 10:51:32 +0000 2009' # Get this string from the Twitter API
dt = datetime.strptime(created_at, '%a %b %d %H:%M:%S +0000 %Y')

и вставьте их в свою коллекцию Mongo следующим образом:

connection = pymongo.Connection('mymongohostname.com')
connection.my_database.my_collection.insert({
    'created_at': dt,
    # ... other info about the tweet ....
}, safe=True)

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

three_days_ago = datetime.datetime.utcnow() - datetime.timedelta(days=3)
tweets = list(connection.my_database.my_collection.find({
    'created_at': { '$gte': three_days_ago }
}).sort([('created_at', pymongo.DESCENDING)]))
person A. Jesse Jiryu Davis    schedule 11.01.2012

1) Протестируйте и посмотрите :-)

2) Если вы используете pymongo и устанавливаете поле равным объекту даты и времени python, то он сохранит его в правильном формате bson и вернет вам объекты даты и времени, когда вы его запросите. Смысл pymongo действительно в том, чтобы работать с собственными объектами Python. На самом деле вы не устанавливаете даты в формате BSON с помощью $date. Он делает это под капотом. При этом я не уверен, как pymongo узнает, что нужно маршалировать для вас строковую дату, не имея возможности сказать, что это дата.

3) Если ваши значения уже находятся в mongodb в виде необработанных строк, вам нужно будет преобразовать их самостоятельно на стороне клиента, используя форматирование строк: http://docs.python.org/library/datetime.html#strftime-strptime-behavior

Редактировать: если вы хотите запустить функцию в mongodb, которая преобразует ваши строковые даты в объекты даты:

Как преобразовать свойство в MongoDB из текста в тип даты?

person jdi    schedule 11.01.2012