38

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

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

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

4

5 回答 5

69

你只需要存储一个 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-04T16:51:26.913 回答
14

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

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

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

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

于 2012-03-06T14:17:45.833 回答
3

实际上这也不起作用。当您尝试使用 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 }) 

会工作...

于 2018-06-26T21:51:13.537 回答
1
result = db.objects.insert_one(
   {"last_modified": datetime.datetime.utcnow()})

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

于 2016-07-26T14:58:58.363 回答
0

要创建具有特定日期的文档,例如 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})
于 2021-08-20T06:43:19.297 回答