2016-11-09 4 views
0

У меня есть модель, как это:Loopback: около фильтра на объекте подполе

{ 
    name: 'My Favorite Shop', 
    address:{ 
     location: [12.534 /* longitude */ ,41.9221/* latitude */] 
    } 
} 

Документы хранятся в базе данных MongoDB, и, таким образом, я хотел бы запросить их, как:

//assuming shops to be the name of the containing model 
app.models.shops.find({ 
    where: { 
     'address.location': {lat: 13, lng: 40} 
    } 
}, callback); 

Проблема в том, что этот запрос не получил никакого результата. Я думаю, это из-за природы поля location, которое вложено в address, но я не смог проверить это.

Любая идея?

Благодаря

UPDATE: он вышел я забыл установить enableGeoIndexing свойство в определении источника данных. После выполнения запроса возникает следующая ошибка:

{"name":"MongoError","message":"Unable to execute query: error processing query: ns=acidata-dev.pos limit=25 skip=0\nTree: GEONEAR field=address.location maxdist=1.79769e+308 isNearSphere=0\nSort: {}\nProj: {}\n planner returned error: unable to find index for $geoNear query","$err":"Unable to execute query: error processing query: ns=acidata-dev.pos limit=25 skip=0\nTree: GEONEAR field=address.location maxdist=1.79769e+308 isNearSphere=0\nSort: {}\nProj: {}\n planner returned error: unable to find index for $geoNear query","code":17007} 

ответ

0

Я, наконец, нашел проблему. A 2d индекс был применен к полю address.location, но Loopback (кажется) поддерживает только геоинформацию над индексами 2dSphere. Таким образом, я решил, добавив индекс 2dSphere по такому полю.