我有一个地址类型为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(需求索引),用于:{状态:1,位置:{$ nearSphere:[3.264204899999982,50.83079910000009],$ maxDistance:1000}}


我不明白为什么会为此引发错误。

最佳答案

似乎是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
    });
});

09-07 17:42