在MongoDB下java驱动程序Mapreduce命令范围; 向Scope添加功能

gbe*_*ley 5 mapreduce mongodb

他们是一种执行MongoDB映射的方法,通过java驱动程序减少作业,在该驱动程序中创建包含函数的作用域DBObject.

我可以在javascript中执行我的map reduce配置,其中传入的范围包含实用程序函数,但我无法弄清楚如何使用java驱动程序执行此操作.

我使用mapReduceCommand设置了范围

c.addExtraOption("scope",new BasicDBObject().append('average',function(){ return false;}));

但是我无法让映射器/缩减器将范围组件"eg"平均值识别为函数.如果我使用引号,map reduce上下文认为它是一个String,但如果没有,我似乎无法使作用域组件解析.

如何通过java驱动程序在scope组件中获取函数?

感谢Ren的回答,这是一个spring bean配置,用于为具有函数的mongodb java驱动程序设置范围.

    <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 &gt; arguments.length; i++) s += arguments[i];return s / arguments.length;}"/>
            <constructor-arg><bean class="org.bson.BasicBSONObject"/></constructor-arg>
        </bean>
    </entry>
Run Code Online (Sandbox Code Playgroud)

小智 8

服务器代码自动转换地图并缩减为Javascript函数,但范围不是这样.要在范围选项中传递函数,您可以改为:

c.addExtraOption("scope", new BasicBSONObject("average",
  new CodeWScope("function(){ return false;}", new BasicBSONObject())));
Run Code Online (Sandbox Code Playgroud)