TypeError: datetime.datetime() не сериализуем JSON

У меня проблема с отметками времени в MongoDB.

Итак, вот случай:

Я читаю в json и добавляю к ним метку времени:

my_json['insertTime'] = datetime.datetime.now()
mongodb.collection.insert_one(my_json)

приведет к такой БД:

"insertTime" : ISODate("2017-05-24T12:39:34.844Z")

После того, как я прочитал его из БД и попытался записать тот же документ в другую таблицу mongoDB, я получаю следующую ошибку:

TypeError: datetime.datetime(2017, 5, 24, 12, 39, 46, 671000) is not JSON serializable

Я читал решения, которые преобразуют дату и время в строковое значение, но я бы хотел, чтобы оно было в формате ISODate, как в первой таблице.

Вот как выглядит метка времени после получения из таблицы A:

'insertTime': datetime.datetime(2017, 5, 24, 12, 39, 46, 671000)

Что мне сделать, чтобы вставить его во вторую таблицу с тем же форматом (ISODate)?

PS: я загружаю данные в таблицу B следующим образом:

tableB.insert_one(json.loads(json.dumps(docFromTableA)))

person E. Muuli    schedule 24.05.2017    source источник


Ответы (1)


Нет необходимости проходить через представление JSON, чтобы сохранить документ в MongoDB. Просто делать:

tableB.insert_one(docFromTableA)

Родным форматом данных MongoDB является не JSON, это BSON, двоичная структура с гораздо большим количеством типов, чем JSON. PyMongo автоматически конвертирует документы MongoDB между BSON и Python.

person A. Jesse Jiryu Davis    schedule 24.05.2017