我正在开发一个mongo数据库,由于某种原因,它将用户id存储为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')})(当我查询真正的数据库时,它工作得很好)?
发布于 2019-11-18 18:53:13
正如InvalidId消息所述,您需要使用12字节的“二进制”输入或一个由十六进制字符组成的24字符字符串。
因此,如果您想使用类似于“my_user_id”的东西,您将需要使用二进制或十六进制表示,而且,也缺少了两个12字节或24十六进制的字符。
例如,如果您的用户id是'my_ user _id00',那么您可以使用以下任何一个:
database.test_collection.find_one({'user': ObjectId(b'my_user_id00')})database.test_collection.find_one({'user': ObjectId('6d795f757365725f69643030')})您可以在mongoDB API文档上找到更多信息。
发布于 2019-11-18 18:59:42
默认情况下,在集合中插入文档时,如果不在字段名中添加带有_id的字段名,则MongoDB将自动添加对象id字段,如下所示
(https://i.stack.imgur.com/w6VDQ.png)
因此,在执行插入查询时,请使用_id,如下所示.
database.test_collection.insert({'_id': 'my_user_id', 'value': 'my_value'})如果要确保在创建集合时MongoDB不创建_id字段,如果要指定自己的id作为集合的_id,则需要在创建集合时显式定义此字段。
https://stackoverflow.com/questions/58920928
复制相似问题