2017-02-22 47 views
1

我有一個MongodDB數據庫(mydbase),其中包含不同的集合(coll1,coll2,coll3)。我想用PyMongo來收集所有集合的所有文檔的列表(=數據庫)列表(=集合)的字典(文檔)的結構中的所有集合。我試過以下內容:使用PyMongo從MongoDB中的數據庫中檢索所有集合的所有文檔

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

但它返回空列表的列表。這有點奇怪,因爲如果我以類似的方式只查詢一個集合:

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

給出了一個填充列表,如希望的那樣。這裏有什麼問題?

回答

2
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 
0

您可以使用此集合:

[[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({})並與它們形成一個列表。

另外,請記住,您正在加載內存中的所有內容。根據數據庫的大小,這可能不是一個好主意!

相關問題