Mongodb 使用mongoid限制mapreduce的文档

Mongodb 使用mongoid限制mapreduce的文档,mongodb,mapreduce,mongoid,Mongodb,Mapreduce,Mongoid,我通过map/reduce/finalize实现了皮尔逊产品关联。缺少的部分是限制通过过滤查询处理代表用户的文档。对于一个简单的查询,如 mapreduce(mapper, reducer, :finalize => finalizer, :query => { :name => 'Bernd' }) 我让它工作 但我的筛选条件有点复杂:我有一组偏好,需要至少有一个公共元素,另一组偏好可能没有公共元素。在后面的步骤中,我还想将此限制为在一定地理距离内的文档用户 目前,我的ma

我通过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 ] } })
导致此错误消息:数据库命令“mapreduce”失败:{assertion=>不允许手动匹配器配置


如果有人能告诉我如何使用near或in编写地理空间查询并使用mapreduce,我将非常高兴。我还没有玩集合,请参见上文。

只是忘了提到使用mapreduce的空间查询至少在mongodb 1.6.x中还不起作用。此外,我还计划很快提供一个代码示例来演示如何操作pearson产品与map/reduce/finalize的相关性。下面是一个工作示例。mapreduce与空间查询支持计划用于1.9版本,只是忘了提到使用mapreduce的空间查询至少在mongodb 1.6.x中还不能工作。另外,我计划很快提供一个代码示例,以展示如何进行pearson产品相关性使用map/reduce/finalize。下面是一个工作示例的示例。带有空间查询支持的mapreduce计划用于1.9