2016-05-23 2 views
0

Я хочу, чтобы выполнить гео поиск координат и мой код в поле ниже:Запрос mongoose mode.find возле maxdistance не возвращает правильные результаты?

location:{type:[Number],index: '2d'}, 

Shop.find({location:{$near:loc,$maxDistance: 5}}).limit(50).exec(function(err, doc) { 
     if (err) { 
     console.log(err); 
     } 

     callback(doc); 
    }); 

Я установил maxDistance: 5, который должен вернуть мне точку, в пределах 5 км. Но возвращаемые фактические результаты всегда содержат точки, расстояние которых превышает 5 км (и даже имеют точку с удалением 500 км больше).

Что мне делать?

полный код:

module.exports = function(mongoose) { 
    var ShopSchema = new mongoose.Schema({ 
    shopName:  { type: String, unique: true }, 
    address:  { type: String}, 
    location:{type:[Number],index: '2d'}, 
    shopPicUrl:  {type: String}, 
    shopPicTrueUrl:{type: String}, 
    mark: { type: String}, 
    open:{type:Boolean}, 
    shopType:{type:String}, 
    dish: {type: [{ 
     dishName: { type: String}, 
     tags: { type: Array}, 
     price: { type: Number}, 
     intro: { type: String}, 
     dishPic:{ type: String}, 
     index:{type:Number} 
    }]} 

    }); 

    var Shop = mongoose.model('Shop', ShopSchema); 

    var createShop = function(shopName, address,location, shopPicUrl, open,shopType,res, callback) { 
    var shopInstance = new Shop({ 
     shopName: shopName, 
     address: address, 
     location: location, 
     shopPicUrl: shopPicUrl, 
     open:open, 
     shopType:shopType 
     //shopPicTrueUrl:shopPicTrueUrl 
    }); 
    shopInstance.save(function(err){ 
     callback(err); 
    }); 
    }; 
    return { 
    createShop: createShop 
    } 
} 

ответ

0

Попробуйте

var calculatedMaxDistance = (5)/6371; 
/EARTHRADIUSIN KM 


Shop.find(
      { 
       'geo': { 
          $near: [lat,long], 
          $maxDistance: calculatedMaxDistance 

         } 
       } 
    ) 

см это для расчета радиан https://docs.mongodb.org/manual/tutorial/calculate-distances-using-spherical-geometry-with-2d-geospatial-indexes/

+0

я попытался это и calculatedMaxDistance будет слишком мал и ничего не вернулся , Я предполагаю, что $ maxDistance: 5 точно означает 5 км, и я получаю результат в пределах 5 км. Но также получить точку 50 км –

+0

(5/120)/6371; давайте попробуем это. –

+0

все еще не работает - - –

Смежные вопросы