使用pyMongo创建ISODate

时间:2011-10-04 16:26:28

标签: mongodb python-3.x pymongo isodate

我一直试图找到一种方法来创建一个与pyMongo客户端相关的ISODate对象,但到目前为止没有任何成功。

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

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

4 个答案:

答案 0 :(得分:55)

您只需要存储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")
}

答案 1 :(得分:14)

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

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

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

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

答案 2 :(得分:1)

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

result = db.objects.insert_one(
   {"last_modified": datetime.datetime.utcnow()})

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