関数を含むスコープDBObjectを作成するJavaドライバーを介してMongoDBマップリデュースジョブを実行する方法です。
渡されたスコープにユーティリティ関数が含まれているjavascriptでマップリデュース構成を実行できますが、javaドライバーでこれを行う方法がわかりません。
mapReduceCommandを使用してスコープを設定します
c.addExtraOption("scope",new BasicDBObject().append('average',function(){ return false;}));
ただし、マッパー/リデューサーにスコープコンポーネントの「eg」平均を関数として認識させることができません。引用符を使用すると、マップリデュースコンテキストは文字列と見なしますが、そうでない場合は、スコープコンポーネントを解析できないようです。
Javaドライバーを介してスコープコンポーネントの関数を取得するにはどうすればよいですか?
Renの回答のおかげで、関数を使用してmongodbjavaドライバーのスコープを設定するためのSpringBean構成を次に示します。
<util:map id="mrScope"
key-type="java.lang.String"
value-type="java.lang.Object">
<entry key="buckets"><bean class="com.mongodb.util.JSON" factory-method="parse"><constructor-arg value="[0,10,15,20,25,30,35,40,45,50,55,60,65]"/></bean></entry>
<entry key="average">
<bean class="org.bson.types.CodeWScope">
<constructor-arg value="function () {var s = 0;for (var i = 0; i > arguments.length; i++) s += arguments[i];return s / arguments.length;}"/>
<constructor-arg><bean class="org.bson.BasicBSONObject"/></constructor-arg>
</bean>
</entry>