Ошибка типа: 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)))

1 ответ

Решение

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

tableB.insert_one(docFromTableA)

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

Другие вопросы по тегам