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

如何用PyMongo读取MongoDB所有集合数据?解决文件未找到报错

问题分析与解决方案

嘿,我一眼就看出问题所在啦!你代码里犯了个典型的误解——你把MongoDB集合的名称当成本地JSON文件名去用open()读取了,这当然会报FileNotFoundError啊!MongoDB的集合数据是存在数据库服务里的,不是本地磁盘上的文件,完全不需要用文件读取的方式来获取~

下面是修正后的完整代码,我会一步步给你解释逻辑:

import pandas as pd
from pymongo import MongoClient

# 连接本地MongoDB服务,这部分你写的没问题
connection = MongoClient('localhost', 27017)
db = connection.Tmobile

# 获取所有非系统集合名称(注意:pymongo 3.7+版本推荐用list_collection_names,旧版本可以用collection_names)
collection_names = db.list_collection_names(include_system_collections=False)

# 遍历每个集合
for collect_name in collection_names:
    print(f"正在处理集合: {collect_name}")
    # 先获取当前集合的对象(这才是访问MongoDB集合数据的正确方式)
    current_collection = db[collect_name]
    
    # 读取集合中的所有文档:如果数据量不大,直接转成列表;数据量大的话建议用迭代器分批处理
    documents = list(current_collection.find())
    
    # 转成DataFrame方便后续计算(如果不需要DataFrame,直接操作documents列表就行)
    df = pd.DataFrame(documents)
    print(f"集合 {collect_name} 共有 {len(df)} 条数据\n")
    
    # ---------------------- 这里添加你的计算逻辑 ----------------------
    # 举个例子:统计某个字段的平均值(假设集合里有'usage'字段)
    # if 'usage' in df.columns:
    #     avg_usage = df['usage'].mean()
    #     print(f"{collect_name} 中usage字段的平均值: {avg_usage:.2f}\n")

关键修正点说明

  1. 替换错误的文件读取逻辑:删掉了open(collect1,'r')和json.load(fi),改用db[collect_name]获取集合对象,再用find()读取集合内的文档。
  2. 更新集合名称获取方法:collection_names()在新版pymongo中已经被标记为过时,推荐用list_collection_names(),兼容性更好。
  3. 数据处理灵活性:把文档转成DataFrame是为了方便后续的统计计算,如果你的需求不需要DataFrame,直接遍历documents列表处理单个文档即可。
  4. 大数据量优化:如果某个集合数据量特别大,不要直接用list(current_collection.find()),而是用迭代器逐个处理:
    for doc in current_collection.find():
        # 在这里编写单个文档的处理逻辑
        print(doc)
    

内容的提问来源于stack exchange,提问作者sri lakshmi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:31:22