我正在尝试在mongo db中存储一些geojson点。这是我定义的mongoose模式。
new mongoose.Schema({
itemName:String,
loc:{ type: [Number], index: '2dsphere'}
});
接下来我试图运行一个近运算符来找出附近的一些点。这就是我如何定义近似查询。
Model.where('loc').near({ center: { type:"Point",coordinates: [10,10] }, maxDistance: 20 }).exec(function(err,data){
console.log(err);
if (!err && data) {
console.log("Success");
} else {
console.log("Error");
}
});
但是这会返回一个错误值,如下所示:
{[MongoError:无法规范查询:BadValue geo接近 在查询GeoJSON点时只有一个论点。额外的领域 发现:$ maxDistance:20]名称:'MongoError'}
如果我删除maxDistance
,它将返回所有集合元素。
知道为什么会出现这个错误吗?提前感谢您的帮助
答案 0 :(得分:1)
Mongoose仍在使用'geoNear'数据库命令表单。在所有正在进行的MongoDB版本中,这被认为是过时的。
使用标准查询表单,自MongoDB 2.6及更高版本以来已与标准查询引擎集成:
Model.find({
"loc": {
"$near": {
"$geometery": {
"type": "Point",
"coordinates": [ 10,10 ],
},
"$maxDistance": 20
}
}
},function(err,docs) {
// do something here
});
它是JavaScript,一种“动态类型语言”。您不需要strict
类型语言所需的这些荒谬的函数帮助程序,而没有用于定义和对象结构的动态构造。
所以手册(所有示例都是JSON表示法,JavaScript本身可以理解的)告诉你这样做,你总是很好。