将数据从 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:无效数字

通过 python 将 csv 文件插入 MySQL。运行但数据未填充到表中

python 从csv文件插入mysql数据库