You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python导出MongoDB数据至Excel仅保存一行的问题求助

解决MongoDB数据导出Excel仅保存一行的问题

常见原因及修复方案

1. 循环内重复创建/覆盖Excel文件/工作表

如果你的代码在遍历MongoDB查询结果的循环里,每次都执行创建工作簿、获取工作表的操作,会导致每次循环覆盖之前的内容,最终只剩最后一行。

错误示例:

import pymongo
from openpyxl import Workbook

client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["your_db"]
collection = db["your_collection"]

for doc in collection.find():
    wb = Workbook()  # 每次循环新建工作簿,覆盖原有内容
    ws = wb.active
    ws.append([doc["field1"], doc["field2"]])
    wb.save("output.xlsx")

修复:将创建工作簿和保存文件的逻辑移到循环外部:

import pymongo
from openpyxl import Workbook

client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["your_db"]
collection = db["your_collection"]

wb = Workbook()
ws = wb.active
# 可选:写入表头
ws.append(["字段1", "字段2"])

for doc in collection.find():
    ws.append([doc["field1"], doc["field2"]])  # 循环内仅追加数据行

wb.save("output.xlsx")

2. 使用覆盖式写入而非批量写入

如果用pandas的to_excel方法,默认每次调用会覆盖文件,循环内调用只会保留最后一次写入的行。

错误示例:

import pymongo
import pandas as pd

client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["your_db"]
collection = db["your_collection"]

for doc in collection.find():
    df = pd.DataFrame([doc])
    df.to_excel("output.xlsx", index=False)  # 每次覆盖文件

修复:先将所有数据存入列表,再一次性转为DataFrame写入:

import pymongo
import pandas as pd

client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["your_db"]
collection = db["your_collection"]

data_list = []
for doc in collection.find():
    # 可选:将MongoDB的ObjectId转为字符串,避免序列化报错
    doc["_id"] = str(doc["_id"])
    data_list.append(doc)

df = pd.DataFrame(data_list)
df.to_excel("output.xlsx", index=False)

3. 确认MongoDB查询结果行数

先验证你的查询是否真的返回多行数据,可添加统计代码:

print("查询到的数据总行数:", collection.count_documents({}))

如果输出为1,说明MongoDB中目标集合本身只有一行数据,和代码逻辑无关。

额外提示

  • 处理MongoDB的ObjectId时,需转为字符串才能正常写入Excel,否则可能触发序列化错误。
  • 若数据量较大,建议使用openpyxl的流式写入或分块处理,避免内存占用过高。

内容的提问来源于stack exchange,提问作者j ton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 04:45:32