簡體   English   中英

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

但是,運行此返回

InvalidId:“my_user_id”不是有效的 ObjectId,它必須是 12 字節的輸入或 24 字符的十六進制字符串

如何正確地將 ObjectId object 插入到我的測試數據庫中,以便我可以使用

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

(當我查詢真實數據庫時效果很好)?

正如 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 文檔上找到更多信息。

默認情況下,在集合中插入文檔時,如果沒有在字段名中添加帶有_id的字段名,那么MongoDB會自動添加一個Object id字段如下圖![在此處輸入圖片說明]

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

因此,在執行插入查詢時,像這樣使用 _id ...

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

如果要確保 MongoDB 在創建集合時不創建 _id 字段,並且如果要將自己的 id 指定為集合的 _id,則需要在創建集合時顯式定義。

只要您在 Objectid 中有正確的字符串,它就會起作用。您的用戶我必須是從 ObjectId(something)._ObjectId_id 獲得的字節字符串,或者只是十六進制字符串。 如果不保密,請嘗試顯示您的 user_Id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM