2

保存された緯度と経度情報の値に基づいて、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 }
});

誰かが私を助けることができますか?:)

4

2 に答える 2

1

findDistance 関数は、実行時にデータベース フィールドにアクセスできるように、node.js ではなく MongoDB で定義する必要があります。幸いなことに、MongoDB はそのストアド プロシージャに JavaScript を使用しているため、関数は機能するはずです。

MongoDB ストアド プロシージャの保存と使用については、こちらを参照してください。

于 2011-05-03T05:44:06.707 に答える
0

ストアドプロシージャと同等ですが、同じではありません。また、MongoDBストアド関数の使用は避けることをお勧めします。

詳細情報:http ://docs.mongodb.org/manual/applications/server-side-javascript/

于 2013-01-10T07:29:20.977 に答える