我正在尝试在mongodb中存储一些geojson点。这是我定义的猫鼬模式。
new mongoose.Schema({
itemName:String,
loc:{ type: [Number], index: '2dsphere'}
});
接下来,我将尝试运行一个近距离操作员来查找附近的一些点。这就是我定义near查询的方式。
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
,它将返回所有集合元素。
知道为什么会出现这个错误吗?提前感谢的任何帮助
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本机理解)告诉的去做,你总是很好的。