2016-12-10 1 views
1

Я работаю с угловым проектом loopback, mongoDB как базу данных. Поиск ближайшего пользователя по широте и долготе в запросе mongoDB loopback с использованием ключевого слова «near», вызывающего ошибку.Loopback MongoDB GeoIp 'near' запрос от углового клиента

Примечание: Я проиндексировал поле «loc» в 2d.

Ошибка:

> D:\nodejs\your-time\version_1\node_modules\mongodb\lib\utils.js:98 
    process.nextTick(function() { throw err; }); 
           ^
Error: Can't set headers after they are sent. 
    at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:344:11) 
    at ServerResponse.header (D:\nodejs\your-time\version_1\node_modules\express 
\lib\response.js:719:10) 
    at HttpContext.done (D:\nodejs\your-time\version_1\node_modules\strong-remot 
ing\lib\http-context.js:651:9) 
    at D:\nodejs\your-time\version_1\node_modules\strong-remoting\lib\rest-adapt 
er.js:492:11 
    at D:\nodejs\your-time\version_1\node_modules\strong-remoting\node_modules\a 
sync\lib\async.js:251:17 
    at D:\nodejs\your-time\version_1\node_modules\strong-remoting\node_modules\a 
sync\lib\async.js:154:25 
    at D:\nodejs\your-time\version_1\node_modules\strong-remoting\node_modules\a 
sync\lib\async.js:248:21 
    at D:\nodejs\your-time\version_1\node_modules\strong-remoting\node_modules\a 
sync\lib\async.js:612:34 
    at interceptInvocationErrors (D:\nodejs\your-time\version_1\node_modules\str 
ong-remoting\lib\remote-objects.js:690:22) 
    at D:\nodejs\your-time\version_1\node_modules\loopback-phase\node_modules\as 
ync\lib\async.js:154:25 

И мой код ниже:

Profile.find({ 
    filter: { 
     where: { 
      type: 'expert', 
      is_verified: 1, 
      expert_category: $scope.expertCategory, 
      loc: { 
       'near': [lat, lng] 
      } 
     } 
    } 
}).$promise.then(function(users) { 
    console.log(users); 
    $scope.users = users; 
}); 

Что я делаю неправильно?

+0

Похоже, проблема - это что-то еще, вы попытались удалить 'loc: {'near': [lat, lng]}'? Убедитесь, что он работает без lat/long param. – jaym

+0

Попробуйте '{где: {geo: {near: {lat: 42.266271, lng: -72.6700016}}}}' - использовать объект JS вместо массива. – jaym

+0

Я пробовал, та же проблема. Я обнаружил, что loopback поддерживает только геоинформацию поверх 2dsphere (I индексируется в 2d), теперь появляется новая ошибка, приведенная выше. – shoeab

ответ

0

Я просто нашел, что петлевой поддерживают только geoquery над 2dsphere (я индексироваться в 2d) по следующей ссылке: Loopback: near filter on object sub-field

Теперь после индексации в 2dsphere, а также изменил расположение тип поля объекта, проблема решена.

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