[英]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.