Функция выбора Mongoose с агрегатными или близкими функциями - PullRequest
0 голосов
/ 19 января 2019

У меня есть модель с именем Rest с большим количеством столбцов, и я хочу выбрать только несколько из них, применяя оператор Near к этой модели Rest. это мой код

Rest
    .select('rest_status rest_address rest_name rest_contact rest_photo rest_menu rest_avg_rating')
    .aggregate().near({
      near:[parseFloat(req.body.lng),parseFloat(req.body.lat)],
      maxDistance:100000,
      spherical:true,
      distanceField:"dist.calculated"
    })
    .then(rests =>{
      // const response=[];
      //     for(const rest of rests){
      //       console.log(rest);
      //       response.push(rest);
      //     }
      res.send({rests,response_status});
    }).catch(err => res.send(err));

когда я пытаюсь так. я получаю ошибку, что выбор не является функцией. Я пытался изменить позицию выбора, как ниже совокупности и рядом, но это не сработало. Я новичок в этом мангусте, скажите, пожалуйста, есть ли какая-либо функция или способ извлечения ограниченных столбцов из моей модели. я забыл упомянуть, что рядом и выберите, и работает нормально, когда другой не используется, а также, пожалуйста, помогите мне с изменением данных, полученных от модели

1 Ответ

0 голосов
/ 20 января 2019

Вы можете сделать что-то вроде этого ниже:

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.

Надеюсь, что этопомогает.

если вы все еще получаете ошибку, пожалуйста, прокомментируйте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...