Вы можете сделать что-то вроде этого ниже:
Rest.aggregate([
{
$geoNear: {
near: {
type: "Point",
coordinates: [parseFloat(req.body.lng), parseFloat(req.body.lat)]
},
maxDistance: 100000,
spherical: true,
distanceField: "dist.calculated"
}
},
{
$project: {
rest_status: 1,
rest_address: 1,
rest_name: 1,
rest_contact: 1,
rest_photo: 1,
rest_menu: 1,
rest_avg_rating: 1
}
}
//even you can add limit skip below , if u need
,{$limit:<Number>},
{ $skip: <Number>}
]
//depends on your mongo version you may need to set cursor as well.
,
{ cursor: { batchSize: <Number or keep 0> } }
)
.then()
.catch();
Примечание: перед выполнением запроса убедитесь, что вы добавили 2dsphere
индекс в свое поле dist.calculated
в случае аггегата $project
используется для того, что вы хотите сделать с .select
вместо использования .near()
я использовал $geoNear
.
Если вы хотите использовать предельный пропуск, вы можете последовать примеру, другие могут удалить это.
вы также можете добавить поля distanceMultiplier
и includeLocs
в зависимости от ваших требований.
в вышеприведенном, зависит от версии mongoDB, которую вам, возможно, понадобится использовать cursor
в совокупности.
, если нет, вы можете идти вперед без использования cursor
.
Надеюсь, что этопомогает.
если вы все еще получаете ошибку, пожалуйста, прокомментируйте.