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的形式,键值对的形式,直接获取结果,避免使用直接文本的正则方式去提取,效率更高。