我的模型的地址字段类型为Location(KeystoneJS地址+地理坐标)。据我了解,此字段中的地理坐标索引为2dSphere。
但是,如果我尝试使用MongooseJS near函数进行查询,则会返回错误:
var point = [3.2642048999999815241,50.830799100000090124];
Challenge.model.find(
{status: 1}
)
.where('location')
.near({
center: point,
maxDistance: maxDistance,
spherical: true
})
.populate('waypoints')
.exec(function(err, challenges) {
if(err) return res.apiError('1000', Errors['1000']);
return res.apiResponse({
challenges: challenges
});
});
返回:
MongoError:找不到任何特殊索引:2d(需要索引),2dsphere(需要索引),for:{status:1,location:{$ nearSphere:[3.264204899999982,50.83079910000009],$ maxDistance:1000}}
我不明白为什么会为此抛出错误。
答案 0 :(得分:2)
似乎是MongooseJS中的一个错误。如果您使用MongoDB查询表示法,它可以工作:
Challenge.model.find(
{
status: 1,
"location.geo": {$near: { $geometry:{ type: "Point", coordinates: location }, $maxDistance: maxDistance}}},
"-__v -updatedOn -createdOn -slug")
.populate('waypoints')
.exec(function(err, challenges) {
if(err) return res.apiError('1000', Errors['1000']);
return res.apiResponse({
challenges: challenges
});
});