我正在尝试使用 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" });
没有在架构上创建索引并且错误仍然存在。
我尝试了其他几种模式/查询组合,包括:
- Mongoose 地理空间搜索:距离不起作用- 2016 年 2 月 7 日
- Mongoose 地理空间查询 $near - 2018 年 4 月 10 日
- 无法找到 $geoNear 查询的索引 #6549 - 2018 年 5 月 31 日
- 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;
出于某种原因添加。希望这可能对某人有所帮助。