$ maxdistance не найти координаты в километрах, а в
радианах
градусов. Таким образом, вам нужно будет преобразовать километры от радиуса в
радианах
градусов.
Нравится это, например.
var radius = 20
var maxDistance = radius/111.12;
Place.find({
'loc': {
$near:[-73.935242,40.730610],
$maxDistance: maxDistance
}
}).exec()
.then(...)
EDIT: Это в градусах и для 2-го круга
EDIT 2: Ok кажется, что я давал вам ответ на 2d. Мои извинения.
В Documentation за $ geoNear Aggregation он говорит:
Укажите расстояние в метрах для данных GeoJSON и в радианах для наследие пар координат.
Поскольку вы сказали мне, что используете GEOJSON, вы должны преобразовать счетчики в радианы в этом случае.
Чтобы преобразовать километры в радианы так просто, как разделить его на радиус Земли (6371 км)
Вот как это должно выглядеть следующим образом:
var radiusInKm = 20
var radians = radiusInKm/6371 // Divided by earth radius in kilometers
var gquery = [{
$geoNear: {
near: {
type: "Point",
coordinates: [-73.935242, 40.730610]
},
$minDistance: 0,
$maxDistance: radians,
distanceField: "dist.calculated",
spherical: true
}
},
{
$group: {
_id: '$category',
total: {
$sum: 1
}
}
}
];
Experiences.aggregate(gquery,
function(err, result) {
console.log(result);
});
Хорошо, что значение 111 , 12 или это просто пример? – Tony
Это как вы его конвертируете – Mockingguy
ok спасибо, но я использую совокупную функциональность, и я пробовал с этим, но он не работает с вашим примером. – Tony