#json #mongodb #pymongo
#json #mongodb #пимонго
Вопрос:
У меня есть файл JSON (преобразованный из mongodump BSON), который я хотел бы вставить в MongoDB с помощью pymongo. Подход, который я использую, выглядит примерно так:
with open('duplicate_docs.json') as f:
lines = f.readlines()
for line in lines:
record = json.loads(line)
db.insert_one(record)
Однако JSON имеет вид:
{ "_id" : ObjectId( "54ccc3f469702d45ca450200"), "id":"54713efd69702d78d1420500","name":"response"}
Как вы можете видеть, для ключей JSON есть escape charaters (), и я не могу загрузить это как JSON.
Каков наилучший способ исправить строку JSON, подобную этой, чтобы ее можно было использовать для вставки в MongoDB?
Спасибо.
Ответ №1:
В качестве альтернативного подхода, если вы берете фактический результат mongodump, вы можете вставить его прямо в bson.json_util
loads()
функцию.
from pymongo import MongoClient
from bson.json_util import loads
db = MongoClient()['mydatabase']
with open('c:/temp/duplicate_docs.json', mode='w') as f:
f.write('{"_id":{"$oid":"54ccc3f469702d45ca450200"},"id":"54713efd69702d78d1420500","name":"response"}')
with open('c:/temp/duplicate_docs.json') as f:
lines = f.readlines()
for line in lines:
record = loads(line)
db.docs.insert_one(record)
Ответ №2:
почему бы не использовать mongoexport для сброса в json, а не в bson
mongoexport --port 27017 --db <database> --collection <collection> --out output.json
а затем используйте
mongoimport --port 27017 --db <database> --collection <collection> --file output.json
Комментарии:
1. К сожалению, моя версия Mongo 2.6, и Mongoexport ее не поддерживает.
2. @madu ах, я понимаю. затем, как было предложено @Belly выше, вам нужно заменить
ObjectId("54ccc3f469702d45ca450200")
на"_id": {"$oid": "5ef990c9bebbdd790e731b26"}