有没有办法在 mongoDB 中插入数据框?
Is there a way to upsert dataframe in mongoDB?
我在 MongoDB 中有一个现有数据,其中主键设置在 'date' 上,其中有几个字段。
而且我想将具有相同字段的新 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)
我在 MongoDB 中有一个现有数据,其中主键设置在 'date' 上,其中有几个字段。
而且我想将具有相同字段的新 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)