我有以下架构,我在地理坐标上有一个二维索引。
1.5.x
我想找到新的位置:
var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var LocationSchema = new Schema ({
geo: {
type: [Number],
required: true,
index: "2dsphere"
}
});
module.exports = mongoose.model("Location", LocationSchema);
似乎创建了索引:
Location.find({
geo: {
$nearSphere: [req.query.lat, req.query.lng],
$maxDistance: maxDistance
}
}, function(err, events) {
if (err) {
console.log(err);
res.status(500).json(err);
}
res.status(200).json(events);
});
虽然我在这里创建索引但是当我想找到附近的位置时会出现以下错误:
> db.system.indexes.find();
{ "v" : 1, "key" : { "geo" : "2dsphere" }, "name" : "geo_2dsphere", "ns" : "dev.events", "background" : true, "safe" : null, "2dsphereIndexVersion" : 2 }
答案 0 :(得分:6)
来自Mongo Docs Mongo使用[经度,纬度],这里你正在使用反向。
答案 1 :(得分:2)
将解析数据库迁移到AWS后,我遇到了类似的问题。 我通过
解决了这个问题db.prod.createIndex({ "location": "2d" })
prod是我的收藏名称和位置是存储地理位置的列名称(GeoPoint)
找到相关的讨论& geoNear答案 2 :(得分:0)
您已在位置架构中定义了“geo”,并且您正在使用
loc : {
$nearSphere: [req.query.lat, req.query.lng],
$maxDistance: maxDistance
}
将其更改为
geo : {
$nearSphere: [req.query.lat, req.query.lng],
$maxDistance: maxDistance
}
答案 3 :(得分:0)
确保查询中的字段名称与架构中的名称匹配。因为我的错误来了,因为我的架构有'loc'而查询正在搜索'lastLocation'。
var mongoQuery = User.find({
lastLocation: {
$near: coordinates,
$maxDistance: maxDistance
}
}).limit(limit);
var UserSchema = new mongoose.Schema({
//...
lastLocation: {
type: [Number],
index: '2d'
}
});