2015-06-15 107 views
0

我有以下查詢:貓鼬 - 查詢沒有返回

app.get('/matches/:latMin/:latMax/:lonMin/:lonMax', function(req, res){ 
    var matches = City.find({ 
     "latitude": {$gt : String(req.param.latMin), $lt : String(req.params.latMax) }, 
     "longitude" : {$gt : String(req.param.lonMin), $lt : String(req.param.lonMax)} 
    }); 
    matches.exec(function(err, match){ 
       if(err){ 
        console.log(err); 
        return res.send(err); 
       } 
       console.log(match); 
       res.json(match); 
      });  
}); 

這裏是我的架構:

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

module.exports = mongoose.model('City', new Schema({ 
    zip : {type : String, default: ''}, 
    latitude : {type : String, default: ''}, 
    longitude : {type: String, default: ''}, 
    city : {type: String, default: ''}, 
    state : {type: String, default: ''}, 
    county : {type: String, default: ''} 
}), 'locations'); 

當我運行在蒙戈外殼查詢,預期結果發送。但是,上述引號中的日誌返回[]。我在這裏有什麼問題嗎?

+3

不應該將它們轉換爲String來轉換'req.param.latMin','req.param.latMax'等來代替數字(這他們已經是)? – JohnnyHK

+2

我直覺地認爲你的lon,lat是數字,你想要做$ gt,$ lt的數字嗎? –

+3

對,爲什麼你將文檔中的「緯度」和「經度」值存儲爲字符串而不是數字? – JohnnyHK

回答

0

我不知道你是否想使用req.param或者它只是一個錯字。無論如何,req.param已被棄用,您應該使用req.params

我已經設置了你的場景並且查詢正在工作。替換你的代碼var matches以下:

var matches = City.find({ 
    "latitude": {$gt : String(req.params.latMin), $lt : String(req.params.latMax) }, 
    "longitude" : {$gt : String(req.params.lonMin), $lt : String(req.params.lonMax)} 
});