2013-02-26 4 views
8

私はpongongoでアクセスしているmongoにdbをセットアップしました。pongongoでmongodbオブジェクトの配列を返すにはどうしたらいいですか? MapReduceでこれを行うことはできますか?

私は辞書のリストにフィールドの小さなセットをプルできるようにしたいと思います。だから、私はタイプのmongoシェルで何を得るのようなものが...

db.find({},{"variable1_of_interest":1, "variable2_of_interest":1}).limit(2).pretty() 

私のようなPythonの文をみたい:xはむしろ、いくつかの種類の配列構造である

x = db.find({},{"variable1_of_interest":1, "variable2_of_interest":1}) 

カーソルより---つまり、代わりのように、繰り返し処理の:

data = [] 
x = db.find({},{"variable1_of_interest":1, "variable2_of_interest":1}) 
for i in x: 
    data.append(x) 

それは私がワンライナーにこれを持参するのMapReduceを使用することができることを可能ですか?

db.find({},{"variable1_of_interest":1, "variable2_of_interest":1}).map_reduce(mapper, reducer, "data") 

ような何かが私はいくつかの分析のためのRに、このデータセットを出力するつもりが、私はPythonでIOを集中したいと思います。私はあなたがそれらを行う必要があるだろうと考えるの投影について

db.yourcollection.Map_reduce(map_function, reduce_function,query='{}') 

:あなたは何ができるか

答えて

21

に言うように、クエリのみ選択基準を指定するので、あなただけのようにようにリストにカーソルを回し、機能を減らす:

>>> data = list(col.find({},{"a":1,"b":1,"_id":0}).limit(2)) 
>>> data 
[{u'a': 1.0, u'b': 2.0}, {u'a': 2.0, u'b': 3.0}] 

ここで、colはdb.collectionオブジェクトです。

しかし、すべてのものがメモリにロードされるため、大きな/巨大な結果に注意してください。

+0

これは私が知らなかった一般的なpythonのものですか?カーソルオブジェクトのlist()は、そのカーソルが指す値にカーソルを強制的に移動させますか? – Mittenchops

+0

それは言語のことです - JavaScript(これはmongoシェルで、これは次のようになります:db.coll.find()。toArray() - カーソルを結果の配列に変換します。 –

+0

1つのフィールドだけがデータベースから返されます。例えば、 'a'のような例のように、そのようなフィールドのリストを作成することは可能ですか? >>> data [1.0,2.0] ? – jaivalis

2

は、引数として検索クエリをpymongoでのMapReduceを呼び出し、それを渡すことです、それはこのようなことができそれはあなたがたMapReduceを呼び出す必要はありませんmongo documentation

関連する問題