python - 将数据从 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)
解决方案
您可以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)
它的文档可以在这里找到。
推荐阅读
- javascript - 如何将 d3.event 作为子模块导入反应应用程序以使用 d3.event.pageX
- r - 如何使用名称中先前定义的年份将栅格带入 R
- c# - ASP.NET MVC 路由 - Url.Action 发送查询字符串而不是路由值
- yaml - 如何使用snakeyaml自动编辑包含锚点和别名的Yaml文件
- mongodb - 如何将 mongod db 查询更改为聚合
- javascript - 属性或方法“greet”未在实例上定义,但在渲染期间引用
- html - CSS网格不限制列数
- html - 如何在不破坏其元素的情况下创建一个固定的顶部?
- wordpress - Wordpress:如何仅在 Safari 上显示不同的 html?
- javascript - 调用 setState 后对象属性变为未定义