У меня есть приложение на основе определения местоположения, которое находит близлежащих пользователей, что достаточно просто. Это мой запрос mongoDB:
users._ensureIndex({'profile.geoLocation': "2dsphere"});
return users.find({
'profile.geoLocation': {
$near: {
$geometry: {
type: "Point",
coordinates: [long, lat]
},
$maxDistance: 5000
}
}}}
);
Вот где это становится интересным (или, возможно, довольно сложным) ...
Что происходит, когда все пользователи имеют несколько местоположений (в моем случае домашние координаты и рабочие координаты), и я хочу найти ближайшие 2 точки из 4 возможных комбинаций совпадений местоположений. Так что мой результат может прийти из любой из этих комбинаций ...
- домашний адрес текущего пользователя: все домашние адреса
- рабочий адрес текущего пользователя: все рабочие адреса
- домашний адрес текущего пользователя: все рабочие адреса
- рабочий адрес текущего пользователя: все домашние адреса
Это пример того, как выглядит объект профиля для пользователя:
profile: {
"name": "Joe Blogs",
"geoLocations": [{
"place": "home",
"geometry": {
"type": "Point",
"coordinates": {
"longitude": 28.059198400000003,
"latitude": -26.0791897
}
}
}, {
"place": "work",
"geometry": {
"type": "Point",
"coordinates": {
"longitude": 28.0592062,
"latitude": -26.0791921
}
}
}]
}
Я знаю, что могу передать в одной геопространственной точке (для текущего пользователя), и если у каждого пользователя в коллекции есть массив, mongoDB будет сравнивать это местоположение с массивом в каждом документе об использовании. Однако, насколько я понимаю, я не могу передать массив для текущего пользователя.
Прежде чем вы предложите мне использовать только текущее местоположение пользователя, в данном случае это не то, что мне нужно - мне нужно найти ближайшие 2 точки для любой комбинации местоположений.
Есть ли способ сделать это с помощью mongoDB или я собираюсь выполнить итерацию / выполнение этого вручную?