2

我正在执行此查询

{
 "$geoNear":{
  "uniqueDocs":true,
  "includeLocs":true,
  "near":[
     8.759131,
     40.272393
  ],
  "spherical":false,
  "distanceField":"d",
  "maxDistance":0.09692224622030236,
  "query":{
  },
  "num":3
 }
}

在这个模型上:

var ridePathSchema = new Schema({
  ...
  loc: [Number],
  ...
});
ridePathSchema.index({
 loc: "2d"
});

我得到:

Unhandled rejection reason: MongoError: 
can't find any special indices: 2d (needs index), 2dsphere (needs index)

有趣的是,就在此查询之前,我确实对同一模型执行了类似的查询,但我确实对其进行了聚合并且它可以工作。

我究竟做错了什么?

更新:

RidePaths.aggregate([query]) WORKS

RidePaths.find(query) CAN'T FIND INDEX
4

1 回答 1

5

$geoNear 应该作为命令执行或在聚合查询的第一阶段执行(如您所述)。

命令不能传递给猫鼬的 find() 方法。发出命令的唯一方法是通过驱动程序接口。有关如何执行此操作的工作示例,请参阅此要点:https ://gist.github.com/aheckmann/5871847

请记住,驱动程序接口的结果不会是 mongoose 文档,因为 mongoose 被绕过了。

于 2013-06-26T21:27:22.477 回答