在查询中使用maxdistance时,近地运算符的geojson点返回错误

时间:2014-11-05 11:11:46

标签: node.js mongodb mongoose mongodb-query geojson

我正在尝试在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,它将返回所有集合元素。

知道为什么会出现这个错误吗?提前感谢您的帮助

1 个答案:

答案 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本身可以理解的)告诉你这样做,你总是很好。