【问题标题】:How do I compare dates from Twitter data stored in MongoDB via PyMongo?如何比较通过 PyMongo 存储在 MongoDB 中的 Twitter 数据的日期?
【发布时间】:2012-02-07 11:17:37
【问题描述】:

存储在“created_at”字段中的日期是否通过 PyMongo 编组到 Python 日期时间对象,或者我是否必须手动将文本字符串替换为 Python 日期对象?即

How do I convert a property in MongoDB from text to date type?

我不得不用 Python 日期对象替换日期字符串似乎非常不自然,这就是我问这个问题的原因。

我想编写查询来显示过去三天的推文。请让我知道是否有这样做的巧妙方法。谢谢!

【问题讨论】:

  • 可能取决于您使用的映射。你能在数据库中检查最终写在那里的内容吗?

标签: python mongodb twitter pymongo


【解决方案1】:

您可以将 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)]))

【讨论】:

    【解决方案2】:

    1) 测试一下看看:-)

    2) 如果您使用的是 pymongo,并且您将一个字段设置为等于 python 日期时间对象,那么它将以正确的 bson 格式存储它,并在您查询它时将日期时间对象返回给您。 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?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-19
      • 2012-04-25
      • 2019-12-03
      • 2014-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-08
      相关资源
      最近更新 更多