【发布时间】:2021-07-13 19:04:42
【问题描述】:
我正在尝试根据我在 CSV 中的信息在 MongoDB 中插入/更新文档。如果 CSV customer_id 的第一个标题不存在,那么它应该创建一个新文档,但如果它确实存在,那么它应该只更新文档中的所有值。
我构建了用于查找 customer_id 的脚本,如果它不存在,那么它将创建新文档,但无法让更新部分正常工作。
您是否必须指定每个需要更新的标头,或者是否有更有效的更新方法,即在以后添加新标头时利用 CSV 中的标头,这样脚本就不必更新以指定新的标题:
import csv
from pymongo import MongoClient
conn = MongoClient('localhost', 27017)
db = conn.shipping
collection = db.sales
file = csv.reader(open("shipping_list.csv"), delimiter=',')
header = ["customer_id", "customer_name", "sales_rep", "purchase_date", "region", "purchase_price", "shipping_status", "products_purchased"]
for each in file:
if collection.count_documents({ 'customer_id': each[0] }) == 0:
row={}
for n in range(0,len(header)):
row[header[n]] = each[n]
collection.insert_one(row)
else:
row={}
for n in range(0,len(header)):
row[header[n]] = each[n]
collection.update({'customer_id': each[0]}, row)
【问题讨论】:
-
你坚持用python吗?如果没有,请查看mongoimport
-
老实说,我没有考虑过使用 Python 之外的东西。从我刚刚看到的使用 mongoimport 看起来像:
mongoimport -d shipping -c sales --upsert --upsertFields customer_id --file shipping_list.csv -
我认为您错过了选项
--mode=upsert --headerline --type=csv,您可以使用选项--columnsHaveTypes调整purchase_date的日期格式。查看文档页面底部的示例。
标签: python python-3.x mongodb mongodb-query pymongo