2017-11-17 13 views
0

私はMongoDBコレクションをPython 2dリストに渡そうとしています。各サブリストには、ドキュメント内の各キーの値のみが含まれている必要があります。 MongoDBのドキュメントがある場合たとえば、:Pythonの2dリストへのコレクション

[ 
    [ObjectId("5099803df3f4948bd2f98392"), 'marie', '23', 'female], 
    [ObjectId("5099803df3f4948bd2f98391"), 'john', '43', 'male'] 
] 

私はMongoDBのとPyMongoに新しいです:

{ 
    _id: ObjectId("5099803df3f4948bd2f98392"), 
    name: 'marie', 
    age: '23', 
    gender: 'female' 
} 

{ 
    _id: ObjectId("5099803df3f4948bd2f98391"), 
    name: 'john', 
    age: '43', 
    gender: 'male' 
} 

私のような何かを取得する必要があります。今のところ、私がすることができた最も近いが、このようなものです:

people = mongo.db.population 
people_key_list = ['_id', 'name', 'age', 'gender'] 
people_list = [] 

for item in people.find(): 
    people_list.append(item) 

しかし、結果の構造は、私が必要なものは本当にありません。

[ 
    ['ObjectId("5099803df3f4948bd2f98392")','ObjectId("5099803df3f4948bd2f98391")'], 
    ['marie','john'],['23','43'],['female','male'] 
] 

私は2Dのリストを回転させることができ、しかし、私は最初から効率的に必要な構造を生成する方法があるはずだと確信しています...しかし、どのように把握することはできません。

答えて

1

あなたは既にpeople_key_listがキーの名前で定義されているが、これだけ、そのリスト上mapを行うと値を抽出します。そのことについては

from pymongo import MongoClient 
from bson import ObjectId 

data = [ 
    { 
    '_id': ObjectId("5099803df3f4948bd2f98392"), 
    'name': 'marie', 
    'age': '23', 
    'gender': 'female' 
    }, 
    { 
    '_id': ObjectId("5099803df3f4948bd2f98391"), 
    'name': 'john', 
    'age': '43', 
    'gender': 'male' 
    } 
] 

client = MongoClient(); 
db = client['test'] 

db.population.remove({}) 
db.population.insert_many(data) 


people_key_list = ['_id', 'name', 'age', 'gender'] 
people_list = [] 

for person in db.population.find(): 
    people_list.append(map(lambda k: person[k],people_key_list)) 

print(people_list) 

あるいは単に巣mapを:

people_list = map(lambda person: 
    map(lambda k: person[k],people_key_list), 
    db.population.find() 
) 

のどちらかを返します:私はGETTを保つ理由

[ 
    [ObjectId('5099803df3f4948bd2f98392'), u'marie', u'23', u'female'], 
    [ObjectId('5099803df3f4948bd2f98391'), u'john', u'43', u'male'] 
] 
+0

私にはわかりませんING "builtins.KeyError KeyError: 'name'"何か考えていますか? – vabm

関連する問題