我正在使用uber这样的应用程序,我有一组驱动程序,具有currentPosition {latitude,longitutde}
而且我想使驾驶员离开200m,我这样做的方式就像在模型上这样:
driverSchema.methods.CloseDriver = function (userCurrentPosition,next) {
try {
const distance = geolib.getPreciseDistance(
userCurrentPosition,
this.currentPosition
);
return distance <= 200
} catch (error) {
return next();
}
}
然后是带有用户currentPosition的发布请求
const parsedBody = Object.setPrototypeOf(req.body, {});
if(parsedBody.hasOwnProperty("latitude") && parsedBody.hasOwnProperty("longitude")){
const { latitude , longitude } = req.body
const currentPosition = { latitude , longitude }
const drivers = await Driver.find({})
const eligibleDrivers = drivers.filter((driver)=> driver.CloseDriver(currentPosition))
return res.status(200).json({
status : 200 ,
eligibleDrivers
});
如果我们有大量的驱动程序,如果还有另一种方法,效率会很低?
您可以将$geoNear
与aggregate
结合使用,以通过查询本身实现此目的,而不是加载所有驱动程序,然后在javascript中进行此过滤器