«Лучший способ» заключается в использовании оператора $near
или $nearSphere
по мере необходимости. Метод mongoose .geoNear()
использует более старый geoNear
command MongoDB. Остальные операторы играют лучше с другими операторами запроса в последних версии:
userDestinationModel.find({
"location": {
"$near": [ lng, lat ],
"$maxDistance": 1.5
},
"update_time": { "$gt": new Date("2015-01-01") }
},function(err,result) {
});
Вы также можете использовать рамочную агрегацию форму $geoNear. Это имеет собственный вариант «запрос», чтобы указать дополнительную информацию:
userDestinationModel.aggregate(
[
{ "$geoNear": {
"near": [ lng, lat ],
"maxDistance": 1.5,
"distanceField": "distance",
"query": {
"update_time": { "$gt": new Date("2015-01-01") }
}
}}
],
function(err,result) {
}
);
И что позволяет другие варианты, а также быть так же, как "command form", где он выступает и дополнительные «distanceField» в результатах, которые вы могли бы использовать для позже сортировка или фильтрация или что-то еще.
Вы также должны быть в состоянии определить «запрос» в качестве опции к методу мангустов:
userDestinationModel.geoNear(lng, lat,
{
"maxDistance" : 1.5,
"query": {
"update_time": { "$gt": new Date("2015-01-01") }
}
},
function(err, results, stats) {
console.log(results);
});
Но как личное предпочтение я бы для новых операторов, если у вас есть зависимость от более старой версии сервера поддержка.
Также попытайтесь отойти от старых координирующих пар и к GeoJSON, так как он намного более совместим с другими API, с которыми вы, вероятно, будете работать в обмене данными, а также с поддержкой более широкого разнообразия типов GeoJSON. Имейте в виду, что если вы перейдете на GeoJSON, параметры, такие как «maxDistance», и пройденное расстояние будут измеряться «метрами», а не «радианами», как в случае с устаревшими координатами.