以有效方式过滤大型集合

问题描述 投票:0回答:1

我正在使用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
        });

如果我们有大量的驱动程序,如果还有另一种方法,效率会很低?

javascript express mongoose geolocation
1个回答
1
投票

您可以将$geoNearaggregate结合使用,以通过查询本身实现此目的,而不是加载所有驱动程序,然后在javascript中进行此过滤器

© www.soinside.com 2019 - 2024. All rights reserved.