2011-05-02 40 views
2

我試圖根據保存的經度和緯度信息的值在我的mongoDB數據庫中找到一些記錄。我要與我的集合查找適用以下功能:根據條件查找mongodb(在mongoose + node.JS中)記錄

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; 
} 

此函數返回true,當我的計算結果小於10(我用的經度和緯度信息從我的數據庫,由「此」對象引用,和這兩個參數)。我如何從mongoDB獲取適用於此函數的所有消息?

我曾嘗試以下:

exports.index = function(req, res) { 
    var latitude = value1; 
    var longitude = value2; 
    Message.find(Message.findDistance, [], function(err, msgs) { 
     // render the page 
    }); 
} 

但是,我findDistance功能似乎並沒有被貓鼬被稱爲發現功能(沒有輸出在我的開發者控制檯看到和我剛剛得到的所有結果從返回我的mongoDB集合)。另外,我怎樣才能將經度和緯度參數傳遞給findDistance函數?

我的消息模式如下所示:

Message = new Schema({ 
    text: { type: String, required: true }, 
    parent: String, 
    user: ObjectId, 
    latitude: Number, 
    longitude: Number, 
    date: { type: Date, default: Date.now } 
}); 

有人能幫助我嗎? :)

回答

1

您的findDistance函數需要在MongoDB中定義,而不是在node.js中定義,以便它在運行時可以訪問數據庫字段。幸運的是,MongoDB在其存儲過程中使用JavaScript,所以該函數應該可以工作。

有關存儲和使用MongoDB存儲過程的說明,請參閱here

相關問題