【问题标题】:Create an ISODate with pyMongo使用 pyMongo 创建 ISODate
【发布时间】:2011-11-30 20:27:14
【问题描述】:

我一直在尝试找到一种方法来使用 pyMongo 客户端创建 ISODate 对象,但到目前为止没有任何成功。

我使用 http://pypi.python.org/pypi/pymongo3 客户端,这是目前 Python 3 中唯一可用的严重客户端,但问题似乎不是来自这个特定的 pymongo 版本。

我想知道你们中是否有人找到了从 pymongo 客户端使用此 MongoDB 对象类型的解决方案...感谢您的帮助!

【问题讨论】:

  • 如果您需要转换除 "now" 以外的日期,您可能还需要在获取 utc 值之前将时区信息添加到 datetime 中

标签: mongodb python-3.x pymongo isodate


【解决方案1】:

要创建具有特定日期的文档,例如 03/10/1999,请运行以下命令:

from datetime import datetime
from pymongo import MongoClient

db = MongoClient().db_name

date = datetime(1999, 03, 10)
db.collection.insert_one({'date': date})

【讨论】:

    【解决方案2】:

    其实这也行不通。当您尝试使用 utcfromtimestamp 或 fromtimestamp 时,程序会出错,提示它需要一个浮点数。只需将字符串解析为日期时间对象并直接在 Mongodb 中使用。过滤器

    from_dt = datetime.strptime('2018-04-01','%Y-%m-%d')
    #from_dts = datetime.utcfromtimestamp(from_dt)
    to_dt = datetime.strptime('2018-04-30','%Y-%m-%d')
    #to_dts = datetime.utcfromtimestamp(to_dt)
    filterCondition = { 
        "LastLogin" : { "$lte" : to_dt},
        "LastLogin" : { "$gte" : from_dt}
    }
    

    然后

    db[(colName)].find({ "<colName>" : filterCondition }) 
    

    会有用的……

    【讨论】:

      【解决方案3】:
      result = db.objects.insert_one(
         {"last_modified": datetime.datetime.utcnow()})
      

      这里的 utc 代表世界时间坐标。

      【讨论】:

      • 欢迎来到 Stack Overflow。您可以通过添加一些关于代码正在做什么的解释来使这个成为更好的答案
      【解决方案4】:

      对于那些想知道如何从时间戳创建 ISODate 的人:

      ts = time.time()
      isodate = datetime.datetime.fromtimestamp(ts, None)
      

      这将创建没有时区的datetime 对象。当插入 MongoDB 时,它将被转换为正确的 ISODate()

      另外,我强烈建议您查看Python TimeTransitionsImage。注意这里的tuple命名元组(相当于C 中的struct)。还要注意,元组字段与 C 对应项中的字段不同,即使命名相同(例如,tm_wday 以星期一而不是星期日开头)。

      【讨论】:

      • fromtimestamp() 创建一个简单的 datetime 对象,表示服务器本地时区的时间:在大多数情况下,这不是您想要的。你应该改用datetime.utcfromtimestamp(ts)
      【解决方案5】:

      你只需要存储一个 datetime.datetime 的实例。

      从 python shell 插入:

      >>> c.test.test.insert({'date': datetime.datetime.utcnow()})
      ObjectId('4e8b388367d5bd2de0000000')
      >>> c.test.test.find_one()
      {u'date': datetime.datetime(2011, 10, 4, 16, 46, 59, 786000), u'_id': ObjectId('4e8b388367d5bd2de0000000')}
      

      在 mongo shell 中查询:

      > db.test.findOne()
      {
          "_id" : ObjectId("4e8b388367d5bd2de0000000"),
          "date" : ISODate("2011-10-04T16:46:59.786Z")
      }
      

      【讨论】:

      • 好像不行,存储的数据是字符串。 “时间戳”:“2011 年 10 月 5 日星期三 09:56:02 GMT+0200 (CET)”,
      • 您使用的是哪个版本的 MongoDB?
      • 另外,ISODate 不是 BSON 类型。这就是 BSON 日期时间在 shell 中的表示方式。在 PyMongo 中,它表示为 datetime.datetime 的一个实例。 bsonspec.org/#/specification
      • 我的 MongoDB 是
      • 如此简单。到处寻找这个。非常感谢。
      猜你喜欢
      • 2015-11-28
      • 1970-01-01
      • 1970-01-01
      • 2015-02-15
      • 1970-01-01
      • 2017-09-29
      • 1970-01-01
      • 2021-11-23
      相关资源
      最近更新 更多