[英]Change string to objectId within json in pymongo+flask and insert it into 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.