Создать ISODate с pyMongo - PullRequest
28 голосов
/ 04 октября 2011

Я пытался найти способ создания объекта ISODate с помощью клиента pyMongo, но пока безуспешно.

Я использую http://pypi.python.org/pypi/pymongo3 клиент, который является единственным серьезным на данный момент доступным в Python 3, но проблема, похоже, не в этой конкретной версии pymongo.

Я хотел бы знать, нашел ли кто-либо из вас решение использовать этот тип объекта MongoDB из клиента pymongo ... спасибо за вашу помощь!

Ответы [ 4 ]

55 голосов
/ 04 октября 2011

Вам просто нужно сохранить экземпляр datetime.datetime.

Вставка из оболочки python:

>>> 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:

> db.test.findOne()
{
    "_id" : ObjectId("4e8b388367d5bd2de0000000"),
    "date" : ISODate("2011-10-04T16:46:59.786Z")
}
14 голосов
/ 06 марта 2012

Для тех, кто интересуется, как создать ISODate из отметки времени:

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

Это создаст datetime объект без часового пояса. При вставке в MongoDB он будет преобразован в правильный ISODate().

Кроме того, я настоятельно рекомендую посмотреть Python TimeTransitionsImage . Обратите внимание, что tuple здесь с именем кортежа (эквивалентно struct в C). Также обратите внимание на то, что поля кортежей не совпадают с аналогами в C, даже если имена совпадают (например, tm_wday начинается с понедельника, а не воскресенья).

1 голос
/ 27 июня 2018

На самом деле это тоже не работает.Когда вы пытаетесь использовать либо utcfromtimestamp, либо fromtimestamp, программа выдает ошибку, говоря, что ей нужен float.Просто проанализируйте строку в объекте даты и времени и используйте его непосредственно в 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 }) 

будет работать ...

0 голосов
/ 26 июля 2016
result = db.objects.insert_one(
   {"last_modified": datetime.datetime.utcnow()})

Здесь utc обозначает Всемирные координаты времени.

...