2017-02-07 9 views
1

jsonファイルからコレクションに文書を挿入します。bson.errors.InvalidDocument: key '$oid' must not start with '$' どうすれば解決できますか?文書の

例: [{"name": "Company", "_id": {"$oid": "1234as123541gsdg"}, "info": {"email": "[email protected]"}}]

+0

サンプルドキュメントを教えてください。 "$"で始まるドキュメントIDの価値があるようです –

+0

あなたは '$'をエスケープする必要があるでしょう。 簡単な方法は次のとおりです: 'import re; re.escape(あなたの変数はここにあります) ' – Nether

+0

質問の本文を文書 –

答えて

4

bson.ObjectIdクラスでPythonでたObjectIdを表します

from bson import ObjectId 

_id = ObjectId("5899e0aca600741755433908") 

だから、完全例えば:

from bson import ObjectId 

collection.insert(
    {"name": "Company", "_id": ObjectId("5899e0aca600741755433908"), 
    "info": {"email": "[email protected]"}}) 

MongoDBの拡張JSONをロードするためにデータ、PyMongo'sを使用json_util.loads

from bson.json_util import loads 

json_str = '[{"name": "Company", "_id": {"$oid": "5899e0aca600741755433908"}, "info": {"email": "[email protected]"}}]' 

data = loads(json_str) 
print(data) 

for doc in data: 
    collection.insert(doc) 

"loads()"は、 "$ oid"を含む拡張JSON構文から実際のObjectIdインスタンスに変換します。

+0

ありがとう:-) –

+0

よろしくお願いします!私は自分の答えに追加すべきものがほかにありますか、それとも正しいとマークしますか? –

+0

正しいとマークしました。すべてが良いです –

関連する問題