0

我正在尝试使用 Mongoose 5.3.8 根据坐标点存储和查询位置,以便返回另一个点半径内的点。我已阅读文档并在以下部分中实现了 pointSchema + citySchema 示例: 使用 GeoJSON 数据如下所示

const pointSchema = new mongoose.Schema({
  type: {
    type: String,
    enum: ['Point'],
    required: true
  },
  coordinates: {
    type: [Number],
    required: true
  }
});

const citySchema = new mongoose.Schema({
  name: String,
  location: {
    type: pointSchema,
    required: true
  }
});

使用express端点,我使用以下代码和存储为的文档查询 mLab 实例:

DOCUMENT ---------------------------

{
    "_id": "5bdbeb78949541086880dd35",
    "name": "Location1",
    "location": {
        "coordinates": [
            48.5,
            -123.8
        ],
        "_id": "5bdbeb78949541086880dd36",
        "type": "Point"
    }
}

QUERY --------------------------------

Location.findOne({
   location: {
     $near: {
       $geometry: {
          type: "Point" ,
          coordinates: coordinates // [long, latt]
       },
       $maxDistance: 10000,
       $minDistance: 1
     }
    }
  }).then(res => console.log(res))
    .catch(err => console.log(err))

上面的查询发现了错误:

 planner returned error: unable to find index for $geoNear query

我试图通过调用 .index() 在 LocationSchema 上添加索引

LocationSchema.index({ "location": "2dsphere" });

我还尝试通过以下方式向架构添加索引:

LocationSchema.index({ category: 1, location: "2dsphere" });

没有在架构上创建索引并且错误仍然存​​在。


我尝试了其他几种模式/查询组合,包括:

  1. Mongoose 地理空间搜索:距离不起作用- 2016 年 2 月 7 日
  2. Mongoose 地理空间查询 $near - 2018 年 4 月 10 日
  3. 无法找到 $geoNear 查询的索引 #6549 - 2018 年 5 月 31 日
  4. Net Ninja 的 GeoJSON 教程- 2017 年 3 月 27 日

尽管使用附近的坐标进行查询,但我没有让他们返回另一个点半径内的点。我不明白这是哪里出了问题。

  • 是否有一个地理空间查询的工作示例可以返回猫鼬 5.3.8中另一个点的半径内的点?

编辑:澄清问题

编辑:

让它工作。在连接到 mLab 实例的猫鼬选项中,我的选项如下:

    const mongoOptions = {
  useCreateIndex: true,
  useNewUrlParser: true,
  autoIndex: false,
  reconnectTries: Number.MAX_VALUE,
  reconnectInterval: 500,
  poolSize: 10,
  bufferMaxEntries: 0
};

autoIndex: false参数使得即使指定LocationSchema.index({ "location": "2dsphere" });. 为了解决这个问题,我不得不LocationSchema.options.autoIndex = true;出于某种原因添加。希望这可能对某人有所帮助。

4

0 回答 0