Javascript 用一种有效的方法过滤大型集合

Javascript 用一种有效的方法过滤大型集合,javascript,express,mongoose,geolocation,Javascript,Express,Mongoose,Geolocation,我正在开发一个像uber这样的应用程序,我有一组驱动程序,带有currentPosition{latitude,Longitude} 我想让司机们跑200米远,我在模型上的做法是这样的: driverSchema.methods.CloseDriver = function (userCurrentPosition,next) { try { const distance = geolib.getPreciseDistance( userCurrentPositi

我正在开发一个像uber这样的应用程序,我有一组驱动程序,带有currentPosition{latitude,Longitude}

我想让司机们跑200米远,我在模型上的做法是这样的:

driverSchema.methods.CloseDriver = function (userCurrentPosition,next) {
  try {    
    const distance = geolib.getPreciseDistance(
      userCurrentPosition,
      this.currentPosition
   );
   return distance <= 200
  } catch (error) {
      return next();
  }
}
如果我们有大量的驱动程序,如果有其他方法的话,这些驱动程序将不会非常有效?

您可以使用$geoNear with aggregate从查询本身实现这一点&而不是加载所有驱动程序&然后用javascript进行过滤

请参阅此代码

db.drivers.aggregate([
   {
     $geoNear: {
        near: { type: "Point", coordinates: [ CurrentLongitude, CurrentLatitude ] },
        distanceField: "distance",
        maxDistance: 2,
        includeLocs: "currentPosition",
        spherical: true
     }
   }
]);
您必须像这样在模式中存储驱动程序的currentPosition latlang

"currentPosition": {
      "type" : "Point",
      "coordinates" : [ -73.9375, 40.8303 ]
   },

如果大体上你的意思是<100万,那么这并不重要,这很好。
"currentPosition": {
      "type" : "Point",
      "coordinates" : [ -73.9375, 40.8303 ]
   },