Javascript 用一种有效的方法过滤大型集合
我正在开发一个像uber这样的应用程序,我有一组驱动程序,带有currentPosition{latitude,Longitude} 我想让司机们跑200米远,我在模型上的做法是这样的: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
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 ]
},