关于node.js:在查询中使用maxdistance时,geojson点返回错误的近运算符

Near operator for geojson point returning error when maxdistance is used in query

我正在尝试在mongo db中存储一些geojson点,这是我定义的mongoose模式。

1
2
3
4
new mongoose.Schema({
        itemName:String,
        loc:{ type: [Number], index: '2dsphere'}
    });

下一步,我试图运行一个Near运算符以找出附近的一些点。这就是我定义Near查询的方式。

1
2
3
4
5
6
7
8
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: Can't canonicalize query: BadValue geo near accepts
just one argu ment when querying for a GeoJSON point. Extra field
found: $maxDistance: 20] name : 'MongoError' }

如果删除maxDistance,它将返回所有收集元素。

知道为什么会出现此错误吗?感谢您的任何帮助


猫鼬仍在使用'geoNear'数据库命令格式。在所有正在进行的MongoDB版本中,这已被视为过时。

请改用标准查询表单,该表单自MongoDB 2.6及更高版本以来已与标准查询引擎集成在一起:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Model.find({
   "loc": {
       "$near": {
           "$geometery": {
               "type":"Point",
               "coordinates": [ 10,10 ],
            },
           "$maxDistance": 20
        }
    }
},function(err,docs) {

    // do something here
});

它是JavaScript,一种"动态类型化的语言"。您不需要strict类型语言所需的这些荒谬的函数帮助器,而无需定义和对象结构的动态构造。

按照手册(所有示例均以JSON表示法,JavaScript可以理解)执行告诉您的操作,您总会满意的。