我在一个我从一个规范调用的类上有一个类方法Juxtaposition.generate_for(position)
。该方法设置地图缩小并将其称为map_reduce(map, reduce).out(merge: "juxtapositions")
位置变量在it块之前的let中定义。
执行时,如果我只是调用上面的函数(实际上只调用与位置相关的数据的地图减少),那么下面的测试就会失败:
Juxtaposition.count.should eq 1
Juxtaposition.first.value.should eq values
但是,如果我打电话
Juxtaposition.generate_for(positions).first["value"].should eq values
在两次测试之前,他们都通过了。当我使用pry并从那里调用generate_for
方法时,上述两个测试也会通过。
我应该知道mongoid中有一些奇怪的地图缩小行为吗?或者,是否有某种方法可以将结果强制用于以后的查询。
答案 0 :(得分:1)
解决方案很简单。我只需要确保在调用map来调用find。
更具体地说:
map_reduce(map, reduce).out(merge: "juxtapositions").first
或
map_reduce(map, reduce).out(merge: "juxtapositions").to_a
如果没有to_a或者第一个实际的地图缩减似乎没有执行,即使它意味着存储在另一个集合中。