How to dump a collection to json file using pymongo

不打扰是莪最后的温柔 提交于 2019-12-04 04:11:21

问题


I am trying to dump a collection to .json file but after looking in pymongo tutorial I can not find any thing that relates to it.

Tutorial link: https://api.mongodb.com/python/current/tutorial.html


回答1:


Just get all documents and save them to file e.g.:

import json
from pymongo import MongoClient

if __name__ == '__main__':
    client = MongoClient()
    db = client.db_name
    collection = db.collection_name
    cursor = collection.find({})
    file = open("collection.json", "w")
    file.write('[')
    for document in cursor:
        file.write(json.dumps(document))
        file.write(',')
    file.write(']')



回答2:


Complementing @kamilitw I use length of cursor to make a JSON file correctly. I use count() and if-else:

def writeToJSONFile(collection):
cursor = collection.find({})
file = open("collection.json", "w")
file.write('[')

qnt_cursor = 0
for document in cursor:
    qnt_cursor += 1
    num_max = cursor.count()
    if (num_max == 1):
        file.write(json.dumps(document, indent=4, default=json_util.default))
    elif (num_max >= 1 and qnt_cursor <= num_max-1):
        file.write(json.dumps(document, indent=4, default=json_util.default))
        file.write(',')
    elif (qnt_cursor == num_max):
        file.write(json.dumps(document, indent=4, default=json_util.default))
file.write(']')
return file

So the JSON file will be correct in the and, because before as writing like this [{"test": "test"},], now It's writing [{"test":"test1"},{"test":"test2"}]




回答3:


Here's another way of not saving a , before the closing square brackets. Also using with open to save some space.

filter = {"type": "something"}
type_documents = db['cluster'].find(filter)
type_documents_count = db['cluster'].count_documents(filter)

with open("type_documents.json", "w") as file:
    file.write('[')
    # Start from one as type_documents_count also starts from 1.
    for i, document in enumerate(type_documents, 1):
        file.write(json.dumps(document, default=str))
        if i != type_documents_count:
            file.write(',')
    file.write(']')

It basically doesn't write the comma if number of iterations is equal to the number of documents (which is the last document it saves).



来源:https://stackoverflow.com/questions/49153020/how-to-dump-a-collection-to-json-file-using-pymongo

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!