Je suis en train de construire une api en utilisant express et mongoose. J'ai une collection de revues qui a un champ de localisation qui stocke geoJSON. J'essaie d'interroger ma collection d'avis en utilisant la méthode suivante agrégat y $geoNear .
Voici la partie pertinente de mon ReviewSchema :
location: {
type: {
type: String,
default: 'Point'
},
coordinates: {
type: [Number]
}
}
J'ai également ajouté un 2dsphère l'index :
ReviewSchema.index({ location: '2dsphere' });
Je suis capable d'interroger avec succès la collection en utilisant trouver y $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))
});
Cependant, lorsque j'essaie d'utiliser l'agrégat et $geoNear, je reçois une erreur :
le champ proche doit être ponctuel
Voici la route avec la requête :
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))
});
La syntaxe de ma requête est basée sur la documentation de mongoDB pour $geoNear. Est-ce que je ne l'utilise pas correctement avec mongoose ? Toute aide est la bienvenue !