Вставка документа в MongoDB из mongodump JSON с помощью pymongo

#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"}