#python #mongodb #uuid
#python #mongodb #uuid
Вопрос:
Я пытаюсь использовать UUID в качестве идентификатора моих объектов в MongoDB.
Идентификатор генерируется на основе электронной почты:
str(uuid.uuid5(uuid.NAMESPACE_URL, email.lower().strip()))
Когда я сохраняю документ в БД, я получаю сообщение TypeError о том, что:
bson.errors.InvalidId: 'd3ab7243-c756-53d2-8c96-b239b3f19509' is not a valid ObjectId, it must be a 12-byte input or a 24-character hex string
Я также пробовал это:
from bson.binary import UUID
import uuid
UUID(str(uuid.uuid5(uuid.NAMESPACE_URL, email.lower().strip())))
Что также выдает ошибку типа:
TypeError: id must be an instance of (bytes, str, ObjectId), not <class 'uuid.UUID'>
Просматривая эту страницу: https://docs.mongodb.com/manual/reference/method/UUID/#convert-character-string-to-uuid заставил меня поверить, что это должно быть возможно.
Комментарии:
1. Как это поле определено в схеме?
Ответ №1:
Конечно, вы можете преобразовать UUID в строку и обратно. Ваша проблема в том, что идентификатор объекта MongoDB не может быть UUID. Это 12-байтовое двоичное значение с очень специфическим форматом, которое генерируется Mongo. Вы не указываете идентификатор объекта — Монго создает его. Если вы хотите, чтобы в ваших записях был столбец UUID (что очень разумно), вам нужно добавить свой собственный столбец UUID.
Вы можете вызвать функцию ObjectId(), чтобы вернуть правильный идентификатор объекта, если хотите. Обычно это не очень полезно.