Я строю API, используя экспресс и мангуст.У меня есть коллекция обзоров, которая имеет поле местоположения, в котором хранится geoJSON.Я пытаюсь запросить мою коллекцию отзывов, используя aggregate и $ geoNear .
Вот соответствующая часть из моей ReviewSchema:
location: {
type: {
type: String,
default: 'Point'
},
coordinates: {
type: [Number]
}
}
Я также добавил 2dsphere index:
ReviewSchema.index({ location: '2dsphere' });
Я могу успешно запросить коллекцию, используя find и $ nearSphere :
router.get('/:longitude/:latitude/:dist', (req, res) => {
Review.find({
location: {
$nearSphere: {
$geometry: {
type: 'Point',
coordinates: [req.params.longitude, req.params.latitude]
},
$maxDistance: req.params.dist * 1609.34
}
}
})
.then(reviews => res.json(reviews))
});
При попытке использовать агрегат и $ geoNear, однако, я получаю сообщение об ошибке:
'Ближним полем должна быть точка'
Вот маршрут с запросом:
router.get('/:longitude/:latitude', (req, res) => {
Review.aggregate([{
$geoNear: {
near: {
type: "Point",
coordinates: [req.params.longitude, req.params.latitude]
},
spherical: true,
maxDistance: 10 * 1609,
distanceField: 'distance'
}
}])
.then(reviews => res.json(reviews))
.catch(err => console.log(err))
});
Синтаксис для моего запроса основан на документации mongoDB для $ geoNear.Я неправильно использую это с мангустом?Любая помощь очень ценится!