问题描述
我在MongoDB中有一个现有数据,其中主键设置为“日期”,其中有几个字段。
我想将具有相同字段的新pandas数据框向上插入到MongoDB中的现有数据框
例如,我有一个看起来像
的df我想添加看起来像df的
所以重复的索引2017-05-19 21:19:00,2017-05-19 21:20:00,2017-05-19 21:21:00 使用新值进行更新,并将其他新索引添加到现有df
所以最终的df应该看起来像这样
我当前正在使用
try:
cursor.insert_many(data,ordered=False)
except pymongo.errors.BulkWriteError as e:
print(e.details['writeErrors'])
做到这一点,并且此函数在附加新索引时效果很好,但是会抛出
'keyValue': {'date': datetime.datetime(2020,8,15,9,24)},'errmsg': 'E11000 duplicate key error collection: bitcoin.raw index: date_1 dup key: { date: new Date(1597483440000) }'
重复索引上的错误种类。
有没有办法解决这个问题? 预先感谢。
解决方法
您不能使用insert_many()
。您将需要迭代数据框并为每个记录使用replace_one()
,并使用与日期和upsert=True
设置相匹配的过滤器。
使用类似的东西:
for row in df.to_dict(orient='records'):
db.mycollection.replace_one({'date': row.get('date')},row,upsert=True)