2017-02-22 4 views
1

Ich habe eine MongodDB-Datenbank (Mydbase) mit verschiedenen Sammlungen darin (Coll1, Coll2, Coll3). Ich möchte alle Dokumente aller Sammlungen in einer Listenstruktur (= Datenbank) von Listen (= Sammlungen) von Dokumenten (Dokumenten) mit PyMongo sammeln. Ich habe folgendes versucht:Abrufen aller Dokumente aller Sammlungen aus einer Datenbank in MongoDB mit PyMongo

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

aber es gibt eine Liste leerer Listen zurück. Welches ist ein bisschen eines seltsam, denn wenn ich nur eine Sammlung in ähnlicher Weise abfragen:

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

, die eine besiedelte Liste gibt wie erhofft. Was ist das Problem hier?

Antwort

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

coll ist eine Variable, so brauchen wir db[coll] statt db.coll

zum Beispiel zu verwenden, für eine db mit einem '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

Sie diese verwenden könnten benannte Sammlung:

[[record for record in db[collection_name].find({})] for collection_name in db.collection_names()] 

Ich würde dies in der lesen wie folgt:

[something for collection_name in db.collection_names()] 

Wir verwenden db.collection_names() eine iterable in unserem db, die die Namen der Sammlungen zu erhalten.

Wir iterieren dann über dieses iterable und setzen den aktuellen Sammlungsnamen in die Variable collection_name. Mit dieser collection_name Variable machen wir something.

Dies wird die äußere Liste des gewünschten Ergebnisses bilden.

Nun wollen wir die inneren Listen ansprechen.

[record for record in db[collection_name].find({})] 

Lassen Sie uns zunächst die iterable identifizieren. Das heißt db[collection_name].find({}). Es ist die Kombination der beiden, db[collection_name] Zugriff auf die Sammlung und .find({}), um eine iterable zu erhalten.

Mit der collection_name Variable, von der äußeren Liste, greifen wir auf die aktuelle Sammlung zu. Wir können uns die db[collection_name] als aktuelle Sammlung vorstellen, aus der wir Datensätze extrahieren.

Aus dieser Sammlung finden wir alle Datensätze, .find({}) und bilden eine Liste mit ihnen.

Denken Sie auch daran, Sie laden alles in den Speicher. Abhängig von der Größe Ihrer Datenbank ist dies möglicherweise keine gute Idee!

Verwandte Themen