Вставьте 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 коллекции, вам необходимо явно определить это при создании коллекции.

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