2013-01-22 20 views
1

對於我從規範調用的類,我有一個類方法Juxtaposition.generate_for(position)。該方法設置地圖縮小並調用它map_reduce(map, reduce).out(merge: "juxtapositions")當立即訪問結果時,方法的不同行爲

位置變量在let塊之前的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

我想這意味着generate_for正在返回與您所期望的不同的東西。 –

+0

是的,它不會像預期的那樣返回任何東西或保存到mongodb中,除非我在生成時特別要求它的值。 – iterion

+0

mongo的哪個版本? –

回答

1

解決方案非常簡單。我只需要確保打電話找到映射減少。

更具體地說:

map_reduce(map, reduce).out(merge: "juxtapositions").first 

map_reduce(map, reduce).out(merge: "juxtapositions").to_a 

沒有to_a或第一實際映射減少不執行現在看來,即使它意味着要存儲在另一個集合。

+0

我想我遇到類似於您在原始問題中遇到的問題。你能否詳細說明你的解決方案? – blim8183

+0

我在上面擴展了我的答案,希望有助於。如果您仍然沒有收到結果,請檢查地圖縮小版中的JavaScript。如果事情出錯,它似乎也會在那裏默默地失敗。 – iterion