存储在'created_at'字段中的日期是否通过PyMongo封送到Python日期时间对象,还是我必须用Python Date对象手动替换文本字符串?即
How do I convert a property in MongoDB from text to date type?
我不得不用Python日期对象替换日期字符串,这是非常不自然的,这就是我提出这个问题的原因。
我想编写显示过去三天推文的查询。如果有一个光滑的方式,请告诉我。谢谢!
答案 0 :(得分:16)
您可以将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)]))
答案 1 :(得分:0)
1)测试一下,看看: - )
2)如果您正在使用pymongo,并且您将字段设置为等于python datetime对象,那么它将以适当的bson格式存储它,并在您查询时将datetime对象返回给您。 pymongo的观点实际上是在本机python对象中工作。您没有使用$ date真正设置BSON格式的日期。它在引擎盖下做到了。话虽这么说,我不知道pymongo会怎么知道为你编组一个字符串日期,而没有能力说出约会。
3)如果您的值已经在mongodb中作为原始字符串,那么您需要使用字符串格式在客户端自行转换它们:http://docs.python.org/library/datetime.html#strftime-strptime-behavior
编辑:如果您想在mongodb上运行一个将字符串日期转换为日期对象的函数:
How do I convert a property in MongoDB from text to date type?