私はこれを今日かなり手にしました。 scope
キーワード引数は辞書である必要があります。マッパーのスコープ内の関数となる変数を定義する場合は、その名前をキーとして置き、Code()
コンストラクタにラップされた関数宣言を指定します。ここでは、MongoDB v3.2.8とpymongo v3.3.1の実例があります:
import pymongo
import bson
db = pymongo.MongoClient().test
db['test-input'].insert_many([
{'foo': 'bar', 'angle': 0},
{'foo': 'bar', 'angle': 90},
{'foo': 'baz', 'angle': -90}
])
mapper = bson.Code(
"""
function map() {
emit(this.foo, radians(this.angle))
}
"""
)
reducer = bson.Code(
"""
function reduce(key, values) {
var avg = 0;
for (i in values) {
avg += values[i];
}
return avg/values.length;
}
"""
)
output_collection = db['test-input'].map_reduce(
mapper, reducer, 'test-output',
scope={
'radians': bson.Code("function(x) {return x * Math.PI/180}")
}
)
print [x for x in output_collection.find()]