我有一个名为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”并能很好地工作,也请帮我更改从模型获取的数据
答案 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()
。
如果要使用限制跳过,可以按照示例进行操作,否则可以将其删除。
您还可以根据需要添加distanceMultiplier
和includeLocs
字段。
在上面,取决于您可能需要合计使用cursor
的mongoDB版本。
如果没有,则可以不使用cursor
继续操作。
希望这会有所帮助。
如果仍然有任何错误,请发表评论。