2017-02-22 8 views
1

私はMongodDBデータベース(mydbase)に異なるコレクション(coll1、coll2、coll3)を持っています。私は、PyMongoで辞書(文書)のリスト(=コレクション)リスト(=データベース)の構造ですべてのコレクションのすべての文書を収集したいと思います。私は以下を試した:PyonggoでMongoDBのデータベースからすべてのコレクションのすべてのドキュメントを取得

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

しかし、それは空リストのリストを返します。同じような方法で1つのコレクションだけを照会すると、奇妙なものです。

希望するように人口を集めたリストを表示するためです。ここでの問題は何ですか?

答えて

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

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

という名前のコレクションとデシベルのために、例えば代わり​​にdb.coll

db[coll]を使用する必要があります。

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

私はこれを方法以下:

[something for collection_name in db.collection_names()] 

私たちは、DB内のコレクションの名前を表す反復可能を取得するためにdb.collection_names()を使用しています。

次に、現在のコレクション名を変数collection_nameに入れて、その繰り返し可能なものを反復処理します。そのcollection_name変数ではsomethingとなります。

これは、希望の結果の外側のリストを形成します。

次に、内側のリストについて説明します。

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

まず、イテラブルを特定しましょう。つまり、db[collection_name].find({})です。それは2つの組み合わせ、db[collection_name]はコレクションにアクセスし、.find({})は繰り返し可能です。

外部リストから変数collection_nameを使用して、現在のコレクションにアクセスします。 db[collection_name]をレコードを抽出している現在のコレクションと考えることができます。

このコレクションから、すべてのレコード、.find({})を見つけてリストを作成します。

また、すべてをメモリにロードしています。データベースのサイズによっては、これは良い考えではないかもしれません!

関連する問題