首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将ObjectId插入mongodb

将ObjectId插入mongodb
EN

Stack Overflow用户
提问于 2019-11-18 18:39:48
回答 2查看 5.6K关注 0票数 1

我正在开发一个mongo数据库,由于某种原因,它将用户id存储为ObjectId

为了测试某些函数,我希望能够填充测试数据库--例如,如下所示:

代码语言:javascript
复制
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对象插入到测试数据库中,以便可以使用

代码语言:javascript
复制
database.test_collection.find_one({'user': ObjectId('my_user_id')})

(当我查询真正的数据库时,它工作得很好)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-18 18:53:13

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

因此,如果您想使用类似于“my_user_id”的东西,您将需要使用二进制或十六进制表示,而且,也缺少了两个12字节或24十六进制的字符。

例如,如果您的用户id是'my_ user _id00',那么您可以使用以下任何一个:

代码语言:javascript
复制
database.test_collection.find_one({'user': ObjectId(b'my_user_id00')})
代码语言:javascript
复制
database.test_collection.find_one({'user': ObjectId('6d795f757365725f69643030')})

您可以在mongoDB API文档上找到更多信息。

票数 1
EN

Stack Overflow用户

发布于 2019-11-18 18:59:42

默认情况下,在集合中插入文档时,如果不在字段名中添加带有_id的字段名,则MongoDB将自动添加对象id字段,如下所示

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

因此,在执行插入查询时,请使用_id,如下所示.

代码语言:javascript
复制
database.test_collection.insert({'_id': 'my_user_id', 'value': 'my_value'})

如果要确保在创建集合时MongoDB不创建_id字段,如果要指定自己的id作为集合的_id,则需要在创建集合时显式定义此字段。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58920928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档