Вставьте ObjectId в mongodb
Я работаю над базой данных mongo, в которой по какой-то причине идентификатор пользователя хранится как ObjectId
.
Чтобы протестировать некоторые функции, я хотел бы иметь возможность заполнить тестовую базу данных - например, следующим образом:
import mongomock
from bson import ObjectId
client = mongomock.MongoClient("mongodb://localhost:27017/test-database")
database = client.get_default_database()
database.test_collection.insert({'_id': ObjectId('my_user_id'), 'value': 'my_value'})
Однако запуск этого возвращает
InvalidId: my_user_id не является допустимым ObjectId, это должен быть 12-байтовый ввод или 24-символьная шестнадцатеричная строка
Как мне правильно вставить объект ObjectId в мою тестовую базу данных, чтобы я мог проверить его запрос с помощью
database.test_collection.find_one({'user': ObjectId('my_user_id')})
(что отлично работает, когда я запрашиваю реальную базу данных)?
2 ответа
Вам необходимо использовать, как указано в сообщении InvalidId, 12-байтовый "двоичный" ввод или 24-символьную строку шестнадцатеричных символов.
Итак, если вы хотите использовать что-то вроде my_user_id, вам нужно будет использовать двоичное или шестнадцатеричное представление, также не хватает двух символов в 12-байтовом или 24-шестнадцатеричном формате.
Например, если ваш идентификатор пользователя my_user_id00, вы можете использовать любой из них:
database.test_collection.find_one({'user': ObjectId(b'my_user_id00')})
database.test_collection.find_one({'user': ObjectId('6d795f757365725f69643030')})
Вы можете найти больше информации в документации API mongoDB.
По умолчанию при вставке документов в коллекцию, если вы не добавляете имя поля с _id в имени поля, тогда MongoDB автоматически добавит поле идентификатора объекта, как показано ниже![Введите описание изображения здесь]
Итак, при выполнении запроса вставки используйте _id как это...
database.test_collection.insert({'_id': 'my_user_id', 'value': 'my_value'})
Если вы хотите убедиться, что MongoDB не создает поле _id при создании коллекции, и если вы хотите указать свой собственный идентификатор в качестве _id коллекции, вам необходимо явно определить это при создании коллекции.