如何将pandas指定列设为NoSQL MongoDB集合的_id字段?
你只需要在导出字典前,将pandas DataFrame中的user_id列重命名为_id即可,MongoDB插入时会默认把_id字段作为文档的主键,不会再自动生成新的_id值。
实现代码
# 方法1:生成临时重命名的DataFrame,不修改原有df db.collection.insert_many(df.rename(columns={'user_id': '_id'}).to_dict('records')) # 方法2:如果需要长期使用带_id的df,可以修改原df df.rename(columns={'user_id': '_id'}, inplace=True) db.collection.insert_many(df.to_dict('records'))
注意事项
- 请确保
user_id列的取值唯一,否则插入时会因为_id字段的默认唯一索引约束抛出重复键错误 - 如果你的
user_id需要使用MongoDB原生的ObjectId类型,可以在重命名前先对该列做类型转换,示例如下:from bson.objectid import ObjectId df['user_id'] = df['user_id'].apply(lambda x: ObjectId(x)) - 如果遇到重复
user_id需要覆盖原有文档而非跳过插入的场景,可以改用批量upsert操作替代insert_many。
内容的提问来源于stack exchange,提问作者emfeku
相关产品推荐
相关产品推荐

