有没有办法在 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)