繁体   English   中英

使用PyMongo从MongoDB中的数据库检索所有集合的所有文档

[英]Retrieving all documents of all collections from a database in MongoDB with PyMongo

我有一个MongodDB数据库(mydbase),数据库中有不同的集合(coll1,coll2,coll3)。 我想用PyMongo在字典(文档)列表(=集合)的列表(=数据库)结构中收集所有集合的所有文档。 我尝试了以下方法:

[list(db.coll.find({})) for coll in db.collection_names()]

但它会返回一个空列表。 这有点奇怪,因为如果我以类似的方式只查询一个集合:

list(db.coll1.find({}))

给出了希望的填充列表。 这里有什么问题?

test = [ list(db[coll].find({})) for coll in db.collection_names() ]

coll是一个变量,因此我们需要使用db[coll]而不是db.coll

例如,对于具有名为'knights'的集合的数据库

db.knights.find_one({}) # correctly from 'knights'
n = 'knights'
db.n.find_one({}) # get one document from 'n'
db[n].find_one({}) # correctly from 'knights'
db['n'].find_one({}) # from 'n' again

您可以使用此:

[[record for record in db[collection_name].find({})] for collection_name in db.collection_names()]

我将以以下方式阅读:

[something for collection_name in db.collection_names()]

我们使用db.collection_names()获得表示数据库中集合名称的可迭代对象。

然后,我们对该可迭代对象进行迭代,将当前集合名称放入变量collection_name 使用该collection_name变量,我们可以执行something

这将形成所需结果的外部列表。

现在,让我们解决内部列表。

[record for record in db[collection_name].find({})]

首先,让我们确定可迭代的。 也就是说, db[collection_name].find({}) 它是db[collection_name]两者的组合,用于访问集合,而.find({})是可迭代的。

通过外部列表中的collection_name变量,我们可以访问当前集合。 我们可以将db[collection_name]视为从中提取记录的当前集合。

从该集合中,我们找到所有记录.find({})并与它们形成一个列表。

另外,请记住,您正在加载内存中的所有内容。 根据您数据库的大小,这可能不是一个好主意!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM