首页 > 解决方案 > 将数据从 csv 插入到 MongoDb

问题描述

我已经能够通过在下面的代码中使用 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)

标签: pythonjsonpandasmongodbpymongo

解决方案


您可以db.collect.bulk_write()结合使用update_many()(如果您想执行多个操作,否则update_many()单独执行)来更新值。

这是一个关于如何使用的示例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)

它的文档可以在这里找到。


推荐阅读