如何用Python检查MongoDB Cloud中数据是否全部插入及插入行数
检查MongoDB插入行数及数据完整性的方法
一、先查当前插入的文档数量
你可以直接在Python代码里用以下命令查看集合里的总文档数:
# 统计集合所有文档数 doc_count = col.count_documents({}) print(f"MongoDB集合中当前文档数:{doc_count}")
或者打开MongoDB Cloud的Compass界面,找到对应的集合,直接查看界面显示的文档数量。
二、你的代码问题(为什么数据少)
你现在的代码里,df.to_dict()默认会把整个DataFrame转换成单个字典(键是列名,值是该列所有行的数组),然后insert_many([data])实际上只插入了1条文档,这就是你觉得数据远少于实际的原因。
三、正确的批量插入代码
要把CSV的每一行都作为单独的文档插入,需要用df.to_dict('records')参数,它会生成一个列表,每个元素对应一行数据的字典:
df = pd.read_csv('FitBit data.csv') # 将每行数据转为字典,生成文档列表 data = df.to_dict('records') db = client['mydatabase'] col = db['Data_fitbit'] # 执行批量插入并获取结果 result = col.insert_many(data) # 打印成功插入的文档数量 print(f"成功插入 {len(result.inserted_ids)} 条文档")
四、确认所有数据是否插入完整
1. 对比总行数
先看CSV的总行数,再和MongoDB的文档数对比:
# 查看CSV的总行数(pd.read_csv默认跳过表头,len(df)即为数据行数) csv_row_count = len(df) print(f"CSV数据总行数:{csv_row_count}") # 查看MongoDB集合的文档数 mongo_doc_count = col.count_documents({}) print(f"MongoDB集合文档数:{mongo_doc_count}")
如果两个数字一致,说明数据全部插入;不一致的话,检查是否有重复数据、字段类型不匹配或者插入时的报错。
2. 抽样验证数据一致性
选取CSV里的几条数据,在MongoDB中查询对比内容是否一致,比如用唯一标识(如用户ID、时间戳)查询:
# 取CSV第3行的唯一字段(假设列名为'Id') sample_id = df.iloc[2]['Id'] # 在MongoDB中查询对应文档 sample_doc = col.find_one({'Id': sample_id}) # 打印对比 print("CSV中的样本数据:") print(df.iloc[2].to_dict()) print("\nMongoDB中的对应文档:") print(sample_doc)
3. 捕获插入错误
如果插入过程中有部分文档失败,insert_many()会抛出BulkWriteError,可以捕获异常查看具体错误信息:
from pymongo.errors import BulkWriteError try: result = col.insert_many(data) print(f"成功插入 {len(result.inserted_ids)} 条文档") except BulkWriteError as e: print(f"插入错误详情:{e.details}") print(f"成功插入 {e.details['nInserted']} 条,失败 {len(e.details['writeErrors'])} 条")
内容的提问来源于stack exchange,提问作者Abhishek Kashyap
相关产品推荐
相关产品推荐

