13

私はpymongoでアクセスしているmongoにdbをセットアップしています。

小さなフィールド セットを辞書のリストに取り込めるようにしたいと考えています。だから、私が入力したときにmongoシェルで得られるもののようなもの...

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

次のような python ステートメントが必要です。

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

ここで、x はカーソルではなく、ある種の配列構造です。つまり、反復ではなく、次のようになります。

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 に出力して分析するつもりですが、IO は Python に集中させたいと考えています。

4

3 に答える 3

30

mapReduce を呼び出す必要はありません。次のようにカーソルをリストに変えるだけです。

>>> 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 オブジェクトです。

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

于 2013-03-01T12:24:14.443 に答える
2

できることは、pymongo で mapReduce を呼び出し、検索クエリを引数として渡すことです。次のようになります。

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

プロジェクションについては、 mongoのドキュメントにあるように、クエリは選択基準のみを指定するため、reduce関数でそれらを行う必要があると思います

于 2013-02-26T15:56:41.110 に答える