2011-05-02 10 views
2

저장된 위도 및 경도 정보를 기반으로 mongoDB 데이터베이스에서 일부 레코드를 찾으려고합니다. 나는 내 컬렉션에 발견하여 다음과 같은 기능을 적용 할 :이 함수는 true를 반환조건에 따라 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; 
} 

내 계산 결과는보다 작은 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 함수는 node.js가 아니라 MongoDB에 정의되어 있어야 실행될 때 데이터베이스 필드에 액세스 할 수 있어야합니다. 다행스럽게도 MongoDB는 저장 프로 시저에 JavaScript를 사용하므로 함수가 작동해야합니다.

MongoDB 저장 프로 시저 저장 및 사용에 대한 지침은 here을 참조하십시오.

관련 문제