如何读取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
相关产品推荐
相关产品推荐

