我正在执行此查询
{
"$geoNear":{
"uniqueDocs":true,
"includeLocs":true,
"near":[
8.759131,
40.272393
],
"spherical":false,
"distanceField":"d",
"maxDistance":0.09692224622030236,
"query":{
},
"num":3
}
}
Run Code Online (Sandbox Code Playgroud)
在这个模型上:
var ridePathSchema = new Schema({
...
loc: [Number],
...
});
ridePathSchema.index({
loc: "2d"
});
Run Code Online (Sandbox Code Playgroud)
我得到:
Unhandled rejection reason: MongoError:
can't find any special indices: 2d (needs index), 2dsphere (needs index)
Run Code Online (Sandbox Code Playgroud)
有趣的是,就在这个查询之前,我确实在同一个模型上执行了类似的查询,但我确实对它进行了聚合并且它有效.
我究竟做错了什么?
更新:
RidePaths.aggregate([query]) WORKS
RidePaths.find(query) CAN'T FIND INDEX
Run Code Online (Sandbox Code Playgroud)
$ geoNear应该作为命令执行,或者在聚合查询的第一阶段执行(如您所述).
命令无法传递给mongooses find()方法.发出命令的唯一方法是通过驱动程序接口.有关如何操作的实例,请参阅此要点:https://gist.github.com/aheckmann/5871847
请记住,由于mongoose被绕过,因此驱动程序界面的结果不会是mongoose文档.