将数据从 csv 插入到 MongoDb
Posted
技术标签:
【中文标题】将数据从 csv 插入到 MongoDb【英文标题】:Upsert data from csv into MongoDb 【发布时间】:2021-06-23 06:38:12 【问题描述】:我已经能够在下面的代码中使用 PyMongo 将数据从 csv 插入 MongoDB。
from pymongo import MongoClient
import urllib
import pandas as pd
import time
import json
client = MongoClient()
db = client.MainDB
col = db.Test
def csv_to_json(filename, header=0):
data = pd.read_csv(filename, header=header, error_bad_lines=False, warn_bad_lines=False, sep='|', low_memory=True)
return json.loads(data.to_dict(orient='records'))
try:
col.insert_many(csv_to_json('main.csv'))
except Exception as e:
print(e)
现在,我必须每天使用相同的 csv 更新此集合,但某些字段的值不同。 这是我想出的,但没有奏效。 请问我该怎么做。
from pymongo import MongoClient
import urllib
import pandas as pd
import json
import time
starttime = time.time()
client = MongoClient()
db = client.MainDB
col = db.Test
def csv_to_json(filename, header=0):
data = pd.read_csv(filename, header=header, error_bad_lines=False, warn_bad_lines=False, sep='|', low_memory=True)
return data.to_dict(orient='dict')
try:
col.update(, csv_to_json('main.csv'),upsert=True)
except Exception as e:
print(e)
【问题讨论】:
使用mongoimport 工具怎么样?应该更有效率。 @WernfriedDomscheir 我可以在 python 脚本中使用 mongoimport 工具吗? 我假设您可以在 Python 中调用任意可执行文件:newbedev.com/python/howto/… 或 ***.com/questions/89228/… 效果更好。感谢您的想法 【参考方案1】:您可以将db.collect.bulk_write()
与update_many()
结合使用(如果您想执行多个操作,否则单独使用update_many()
可以)来更新值。
Here's 举例说明如何使用bulk_write
。
对于update_many()
,你可以有这样的东西:
import pymongo
client = pymongo.MongoClient("mongodb://localhost:1001/")
db = client["mydatabase"]
collect = mydb["customers"]
my_query = "address": "$regex": "ABC[0-9]"
new_values = "$set": "name": "DEF"
x = collect.update_many(myquery, newvalues)
可以在here找到它的文档。
【讨论】:
感谢您的回复。我做了这个更新: col.update_many(, csv_to_json('main.csv'), upsert=True) 我有这个错误:'update' command document too large 我的 csv 大约是 100MB以上是关于将数据从 csv 插入到 MongoDb的主要内容,如果未能解决你的问题,请参考以下文章
如何在将数据从 csv 复制到 sql 表时在目标表中插入 CurrentUserId 和 TenantId 字段
如何将具有自定义枚举类型的数据从 csv 插入现有的 PostgreSQL 表
Codeigniter 将部分 CSV 数据插入到 MYSQL 中,只有 id 和 date
使用python将数据从csv文件插入oracle时出现错误ORA-01722:无效数字