Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将ObjectId插入mongodb_Python_Mongodb_Testing_Mocking_Mongomock - Fatal编程技术网

Python 将ObjectId插入mongodb

Python 将ObjectId插入mongodb,python,mongodb,testing,mocking,mongomock,Python,Mongodb,Testing,Mocking,Mongomock,我正在开发一个mongo数据库,出于某种原因,它将用户id存储为ObjectId 为了测试某些函数,我希望能够填充测试数据库-例如,如下所示: import mongomock from bson import ObjectId client = mongomock.MongoClient("mongodb://localhost:27017/test-database") database = client.get_default_database() database.test_colle

我正在开发一个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:“我的用户id”不是有效的ObjectId,它必须是12字节 输入或输入24个字符的十六进制字符串

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

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

(当我查询真实的数据库时,它可以正常工作)

您需要使用一个12字节的“二进制”输入或一个由16进制字符组成的24个字符的字符串,正如invaliid消息所述

因此,如果你想使用类似“my_user_id”的东西,你需要使用二进制或十六进制表示法,也就是说,缺少两个字符以12字节或24十六进制表示

例如,如果您的用户id为“my_user_id00”,则您可以使用以下任一项:

database.test\u collection.find\u one({'user':ObjectId(b'my\u user\u id00'))
database.test_collection.find_one({'user':ObjectId('6D795F7573656725F69643030'))

默认情况下,在集合中插入文档时,您可以在上找到更多信息。

,如果您没有在字段名中添加带有_id的字段名,则MongoDB将自动添加对象id字段,如下所示![在此处输入图像描述]

()

因此,在执行插入查询时,请像这样使用_id

database.test_collection.insert({'_id': 'my_user_id', 'value': 'my_value'})
如果要确保MongoDB在创建集合时不创建_id字段,并且要将自己的id指定为集合的_id,则需要在创建集合时显式定义此字段