保存された緯度と経度情報の値に基づいて、mongoDB データベースでいくつかのレコードを見つけようとしています。コレクションの検索で次の関数を適用したい:
exports.findDistance = findDistance(latitude, longitude) {
console.log('calculating with lat = ' + latitude + ' and longitude = ' + longitude);
var radian = 0.0174532925;
var x = Math.pow(Math.sin((latitude - this.latitude) * radian / 2), 2);
var y = Math.cos(latitude - radian) * Math.cos(this.latitude - radian);
var z = Math.pow(Math.sin((longitude - this.longitude) * radian/2), 2);
var result = 2*3956*Math.asin(Math.sqrt(x + y * z));
return result < 10;
}
この関数は、計算結果が 10 より小さい場合に true を返します (「this」オブジェクトと 2 つのパラメーターによって参照される、データベースの緯度と経度の情報を使用します)。この関数に適用されるすべてのメッセージを mongoDB から取得するにはどうすればよいですか?
私は次のことを試しました:
exports.index = function(req, res) {
var latitude = value1;
var longitude = value2;
Message.find(Message.findDistance, [], function(err, msgs) {
// render the page
});
}
ただし、私の findDistance 関数は mongoose find 関数によって呼び出されていないようです (開発者コンソールに出力が表示されず、mongoDB コレクションから返されたすべての結果を取得するだけです)。また、緯度と経度のパラメーターを findDistance 関数に渡すにはどうすればよいですか?
私のメッセージスキーマは次のようになります。
Message = new Schema({
text: { type: String, required: true },
parent: String,
user: ObjectId,
latitude: Number,
longitude: Number,
date: { type: Date, default: Date.now }
});
誰かが私を助けることができますか?:)