私はすでに数日かかった問題を抱えており、それを完全に理解することができません。node.jsを使用しており、座標のインデックスが付けられた場所を持つmongodbがあります。事前にインデックスが正常に動作することを確認しました。座標のセットについては、最も近い場所を見つけたいと思います。これが私がそれについて行こうとした方法です:
var Places = require(./models/places.js),
coordFinder = require('./coordFinder.js');
...
function getCoords(userId, callback) {
coordFinder.getCoords(userId, function(err, coords) {
if (err) {
callback(err);
} else {
callback(null, coords);
}
}
}
function getNearestPlaces(coords, callback) {
async.forEachSeries(
coords,
function(coord, done) {
Places.findOne(
{ coordinates: { $near: [ coord.lat, coord.lon ] } },
function(err, place) {
// do something with place
done();
}
)
},
function(err) {
callback(err ? err : null);
}
);
}
...
async.waterfall(
[
...
getCoords,
getNearestPlaces,
...
],
function(err) {
...
}
}
mongodbクエリは一貫して失敗し、最初のクエリに対して次のエラーメッセージが表示されます。
RangeError: Maximum call stack size exceeded
クエリをに変更するgetNearestPlaces
と
... { $near: [ 10, 10 ] } ...
私は一貫してエラーがなく、正しい場所を取得します。coordFinder
inへの呼び出しを避けてにgetCoords
変更getCoords
した場合も同じことが起こります
function getCoords(userId, callback) {
callback(
null,
[
// some coordinates
]
);
エラーがスタックオーバーフローを示していることは知っていますが(スタックサイズを増やしても効果がありませんでした)、どのようにしてスタックオーバーフローが発生したのかわかりません。なぜこれが起こるのかについて誰かが手がかりを持っていますか?洞察を事前に感謝します!
編集mongodb-native
:ちなみに、直接使用した場合も同じ問題が発生したmongoose
ので、問題ないようです。もう1つの手がかり-同じクエリを使用しても、コールバック内から呼び出さなくても問題は発生しません。それがエラーの原因でしょうか?
私が使う
- node.js 0.6.14
- mongodb 2.2.2
- ノードモジュール非同期0.1.22
- ノードモジュールmongodb1.2.5
- ノードモジュールマングース2.5.7
乾杯、ゲオルク