[英]Update ALL and return ALL matching documents from mongodb using pymongo
[英]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.