mongodb文件导入导出

mongoDB导出的文件,将其插入数据库中,有以下处理方式:

一.mongoimport方式

mongoimport --jsonArray -d database_name -c table_name data_location

这种方式,最方便,不用考虑ObjectId,datetime等特殊类型的处理。但是,这种,有时候无法直接登录服务器去执行此命令,就需要脚本的形式去刷数据了。

二.写脚本读取文件,然后将数据刷进去

第一步,需要读取文件。读取文件,可以采用文本读取,或者json的形式读取内容。然后,将读取到的内容,进行进一步的处理。
(1)直接用文本文件的处理方式,如按行读取等常规操作。这种方式,需要考虑的因素较多,例如换行符、有时候还需要考虑正则提取需要的数据,例如下面这样的数据,不是很方便,效率很低!!!。

"_id": {
    "$oid": "5acd7c96a46a0b04ab85c6c0"
},
"created_at": {
    "$date": "2018-04-11T11:10:14.742Z"
}

(2)将文件改成json的格式(或者已经是json文件了),使用“在线json格式校验”,验证json文件的正确性。然后,读取json文件,核心代码如下:

# coding=utf-8
from pymongo import MongoClient
import json
from bson.objectid import ObjectId
import datetime

def convert_strict_mode_OID(obj):
    if "_id" in obj:
        obj['_id']=ObjectId(obj['_id']['$oid'])
    if "created_at" in obj:
        str = obj['created_at']['$date'][:-2]
        obj['created_at'] = datetime.datetime.strptime(str, "%Y-%m-%dT%H:%M:%S.%f")

mongo_url='mongodb://username:password@ip:port/database_name?authsource=admin'
client=MongoClient(mongo_url)
db=client.databse_name
table=db.inquiry_f_a_q
table.drop()


file = "data/json_format_file.txt"
list=None
with open(file, 'r') as fb:
    list = json.load(fb)
for line in list:
    # 直接修改了line,不用返回值
    convert_strict_mode_OID(line)
    table.save(line)

这种方式,对于

"_id": {
    "$oid": "5acd7c96a46a0b04ab85c6c0"
}

这种形式的处理很好,直接是dictionary的形式,键值对的形式,直接获取结果,避免使用直接文本的正则方式去提取,效率更高。

    原文作者:yangyangrenren
    原文地址: https://www.jianshu.com/p/563833a394d1
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞