1

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

2つのテストの前に、両方とも合格します。上記の2つのテストは、pryを使用してgenerate_for、そこからメソッドを呼び出す場合にも合格します。

私が知っておくべきモンゴイドのマップリデュースの奇妙な動作はありますか?または、結果を後のクエリに強制する方法はありますか。

4

1 に答える 1

1

解決策は十分に単純でした。mapreduceの呼び出しでfindを呼び出す必要があります。

すなわち:

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

また

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

to_aがない場合、または最初に実際のマップリデュースが実行されない場合は、別のコレクションに格納することを意図している場合でも、実行されないようです。

于 2013-01-24T23:14:16.533 に答える