【问题标题】:Retrieving all documents of all collections from a database in MongoDB with PyMongo使用 PyMongo 从 MongoDB 中的数据库中检索所有集合的所有文档
【发布时间】:2017-02-22 12:43:36
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: python mongodb pymongo


    【解决方案1】:
    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
    

    【讨论】:

      【解决方案2】:

      你可以用这个:

      [[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({}) 并与它们形成一个列表。

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

      【讨论】:

        猜你喜欢
        • 2021-10-26
        • 1970-01-01
        • 2017-04-15
        • 2020-10-02
        • 2016-10-22
        • 1970-01-01
        • 2014-08-06
        • 2020-07-12
        • 2018-01-09
        相关资源
        最近更新 更多