【问题标题】:Upsert data from csv into MongoDb将数据从 csv 插入到 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)

【问题讨论】:

标签: python json pandas mongodb pymongo


【解决方案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
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-15
  • 2017-01-11
  • 2013-03-06
  • 1970-01-01
相关资源
最近更新 更多