簡體   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