Comment puis-je comparer les dates à partir des données stockées dans Twitter MongoDB via PyMongo?
Question
Les dates stockées dans les « champs » created_at à Python datetime marshalées objets via PyMongo, ou dois-je remplacer manuellement les chaînes de texte avec Python objets Date? à savoir
Comment puis-je convertir une propriété en MongoDB du texte à type de date?
Il semble que je serais obligé de bien naturel que doivent remplacer les chaînes de date avec des objets de date Python, ce qui est la raison pour laquelle je pose la question.
Je voudrais des requêtes d'écriture qui affichent les tweets des trois derniers jours. S'il vous plaît laissez-moi savoir s'il y a un moyen slick de le faire. Merci!
La solution
vous pouvez analyser les horodateurs created_at de Twitter à Python datetimes comme ceci:
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')
et les insérer dans votre collection Mongo comme ceci:
connection = pymongo.Connection('mymongohostname.com')
connection.my_database.my_collection.insert({
'created_at': dt,
# ... other info about the tweet ....
}, safe=True)
Enfin, pour obtenir des tweets au cours des trois derniers jours, le plus récent en premier:
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)]))
Autres conseils
1) Test et voir: -)
2) Si vous utilisez pymongo, et vous définissez un champ égale à un python datetime objet, il va stocker dans le format approprié BSON et retourner des objets datetime de nouveau à vous lorsque vous interrogez cela. Le point de pymongo est vraiment travailler dans les objets Python natifs. Vous ne définissez pas vraiment les dates dans le format BSON avec $ ce jour. Il le fait sous le capot. Cela étant dit, je ne sais pas comment pymongo sauriez au maréchal une date de chaîne pour vous, sans la possibilité de dire la date d'un.
3) Si les valeurs que vous êtes déjà en mongodb sous forme de chaînes brutes, alors vous devez les convertir vous-même sur le côté client à l'aide le formatage de chaîne: http://docs.python.org/library/datetime.html#strftime-strptime-behavior
Edit: Si vous voulez exécuter une fonction sur MongoDB qui convertit vos dates de chaîne à des objets de date:
Comment puis-je convertir une propriété en MongoDB du texte à type de date?