使用mongoid限制mapreduce的文档

时间:2011-01-08 13:03:42

标签: mongodb mapreduce mongoid

我通过map / reduce / finalize实现了皮尔逊产品相关性。缺少的部分是通过过滤器查询来限制要处理的文档(表示用户)。对于像

这样的简单查询
mapreduce(mapper, reducer, :finalize => finalizer, :query => { :name => 'Bernd' })

我让这个工作。

但我的过滤条件有点复杂:我有一组首选项需要至少有一个共同元素和另一组首选项,这些首选项可能没有共同的元素。在后面的步骤中,我还想将其限制在特定地理距离内的文档(用户)。

目前我的代码在我的map函数中有效,但我更喜欢将它分成mongoid或javascript函数支持的查询参数。我解决此问题的所有尝试都失败了,因为代码被忽略或引发错误。

我做了几次测试。

[结果已删除,见下文]

我在MacOS上使用ruby 1.9.2,mongodb 1.6.5-x86_64和mongoid 2.0.0.beta.20,mongo 1.1.5和bson 1.1.5 gems。

我做错了什么?

提前致谢。

更多测试(问题部分解决):

User.where(:name.in => ["Arno", "Bernd", "Claudia"]) 

有效,但是在使用mapreduce时这样

mapreduce(..., :query => { :name.in => ['Arno', 'Bernd', 'Claudia'] })

导致bson错误序列化:键必须是上面提到的字符串或符号(TypeError)

:name.in'name.in'替换'name.$in'会使查询返回无结果(猜测这是按原样传递给mongodb)。

然而

mapreduce(..., :query => { :name => { '$in' => ['Arno', 'Bernd', 'Claudia'] } })

有效,但无论我如何编写表达式,我的地理空间查询尝试都没有取得任何成功。

mapreduce(..., :query => {:location => { "$near" => [ 13, 52, 1 ] } })

导致此error_message:数据库命令'mapreduce'失败:{“assertion”=>“不允许手动匹配器配置”,...

如果有人能让我知道如何使用nearwithin编写地理空间查询并使用mapreduce,我会非常高兴。 (我还没玩过套装,见上文)。

0 个答案:

没有答案