将 ObjectId 插入 mongodb

Insert ObjectId into mongodb

我正在开发一个 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'})

但是,运行这个returns

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')})

(查询真实数据库时正常)?

如 InvalidId 消息所述,您需要使用 12 字节 'binary' 输入或 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 docs 上找到更多信息。

默认在collection中插入文档时,如果不添加字段名中带_id的字段名,则MongoDB会自动添加一个Object id字段如下所示![在此处输入图片描述]

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

所以,当执行插入查询时,像这样使用 _id...

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

如果要确保MongoDB在创建collection时不创建_id字段,如果要指定自己的id作为collection的_id ,那么您需要在创建 collection..

时明确定义它