我正在使用Express和Mongoose构建一个API。我有一个Reviews集合,其中有一个存储geoJSON的location字段。我试图使用aggregate和$geoNear来查询我的Reviews集合。
这是我ReviewSchema中相关的部分:
我还添加了一个2dsphere索引:
我能够成功地使用find和$nearSphere查询集合:
尝试使用聚合和$geoNear时,我遇到了一个错误:
near字段必须是一个点
以下是带有查询的路由:
我的查询语法是基于MongoDB的$geoNear文档。我在Mongoose中使用得正确吗?
这是我ReviewSchema中相关的部分:
location: {
type: {
type: String,
default: 'Point'
},
coordinates: {
type: [Number]
}
}
我还添加了一个2dsphere索引:
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时,我遇到了一个错误:
near字段必须是一个点
以下是带有查询的路由:
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文档。我在Mongoose中使用得正确吗?
parseFloat(req.params.longitude)
,同样适用于纬度。 - Ashh