具有聚合或接近函数的猫鼬选择函数

时间:2019-01-19 10:49:31

标签: node.js mongodb express mongoose mongodb-query

我有一个名为Rest的模型,其中包含许多列,而我只想在该模型上应用Near运算符时从中获取很少的列。这是我的代码

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));

当我这样尝试时。我收到一个选择不是函数的错误。我尝试更改以下聚合和附近的选择位置,但没有奏效。我是这个猫鼬的新手,请告诉我是否有任何函数或方法可以从我的模型中获取有限的列。 我忘了在不使用其他选项时提及“ nose”和“ select”并能很好地工作,也请帮我更改从模型获取的数据

1 个答案:

答案 0 :(得分:0)

您可以在下面执行以下操作:

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

我使用$geoNear而不是使用.near()

如果要使用限制跳过,可以按照示例进行操作,否则可以将其删除。

您还可以根据需要添加distanceMultiplierincludeLocs字段。

在上面,取决于您可能需要合计使用cursor的mongoDB版本。
如果没有,则可以不使用cursor继续操作。

希望这会有所帮助。

如果仍然有任何错误,请发表评论。