将ObjectId插入MongoDB

2024-04-23 06:14:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个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' is not a valid ObjectId, it must be a 12-byte input or a 24-character hex string

如何将ObjectId对象正确地插入到测试数据库中,以便使用

database.test_collection.find_one({'user': ObjectId('my_user_id')})

(当我查询真实的数据库时,哪一个工作正常)?你知道吗


Tags: 函数用户testimportclientid数据库value
2条回答

您需要使用12字节的“二进制”输入或24个字符的十六进制字符串作为invalid消息状态。你知道吗

因此,如果您想使用类似“my\u user\u id”的内容,您需要使用二进制或十六进制表示法,也就是说,缺少两个12字节或24十六进制的字符。你知道吗

例如,如果您的用户id为“my\u user\u id00”,则可以使用以下任一项:

database.test_collection.find_one({'user': ObjectId(b'my_user_id00')})
database.test_collection.find_one({'user': ObjectId('6d795f757365725f69643030')})

您可以在mongoDB API docs上找到更多信息。你知道吗

默认情况下,在集合中插入文档时,如果您没有在字段名中添加带有\u id的字段名,那么MongoDB将自动添加一个Object id字段,如下所示![在此处输入图像描述]

https://i.stack.imgur.com/w6VDQ.png

因此,在执行insert查询时,请像这样使用\u id。。。你知道吗

database.test_collection.insert({'_id': 'my_user_id', 'value': 'my_value'})

如果要确保MongoDB在创建集合时不创建\u id字段,并且要将自己的id指定为集合的\u id,则需要在创建集合时显式定义此字段。。你知道吗

相关问题 更多 >