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

如何读取MongoDB所有集合?及'Database'对象不可调用报错修复

修复MongoDB集合查询的错误问题

首先咱们拆解下你遇到的错误根源:

  • 错误提示'Database' object is not callable,一方面你代码里有拼写错误(collecion应该是collection),更核心的是**find()是集合(Collection)对象的方法,不是数据库(Database)对象的方法**,直接给数据库调用find()肯定会报错。
  • 另外你代码里db = ...的部分没补全,正确获取目标数据库是第一步。

下面给你完整的修复方案和代码:

第一步:正确获取data数据库

把db = ...的部分补全,获取名为data的数据库有两种常用写法:

# 写法1:属性式调用(简洁直观)
db = client.data
# 写法2:字典式调用(适合数据库名含特殊字符的场景)
db = client['data']

第二步:遍历所有集合并执行查询

要读取data库的所有集合,得先获取库下的所有集合名称,逐个拿到集合对象后,再调用find()方法。另外直接print(collection.find())只会打印游标对象,要用pprint格式化输出实际文档:

完整修复后的代码:

from pymongo import MongoClient
import pprint

mongodb_host = 'localhost'
mongo_port = 27017  # 建议用整数类型,MongoClient支持直接传参数
client = MongoClient(mongodb_host, mongo_port)
# 获取目标data数据库
db = client.data

# 获取数据库下所有集合的名称列表
collection_names = db.list_collection_names()

# 遍历每个集合并查询文档
for col_name in collection_names:
    print(f"\n=== 集合 {col_name} 的文档内容 ===")
    # 获取当前集合对象
    collection = db[col_name]
    # 调用find()获取文档游标
    doc_cursor = collection.find()
    # 遍历游标打印每个文档
    for doc in doc_cursor:
        pprint.pprint(doc)

额外小提示

  • 如果只想看每个集合的部分文档,可以给find()加参数,比如collection.find().limit(5)只返回前5条
  • 端口号用整数比字符串更规范,MongoClient的构造函数直接支持host和port两个参数,不用手动拼接字符串

内容的提问来源于stack exchange,提问作者Noussaier Grayaa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:56:06