Mongodb $接近返回错误

时间:2016-06-15 22:46:28

标签: mongodb

我有一个基本文件,如下:

{ 
    "_id" : ObjectId("5760fe623f6d3ad25e387ffc"), 
    "type": 5,
    "product" : { 
         "location" : { 
              "geometry" : [ 153.39999999999998, -28.016667 ], 
              "name" : "Gold Coast QLD, Australia", 
              "id" : "ChIJt2BdK0cakWsRcK_e81qjAgM" 
          } 
    } 
}

我正在尝试使用Mongodb提供的$near方法查询位置。

这是我的疑问:

db.posts.find({
    'product.location.geometry': {
        $near: [ 153.39999999999998, -28.016667 ]
     }
})

在Mongodb文档中,它声明:

  

要使用传统坐标指定点,$ near需要2d索引   并具有以下语法:

{
    $near: [ <x>, <y> ],
    $maxDistance: <distance in radians>
}

它甚至在他们的网站上提供了这个例子:

db.legacy2d.find({ 
    location : { $near : [ -73.9667, 40.78 ], $maxDistance: 0.10 } 
})

这是它产生的错误:

Error: error: {
    "waitedMS" : NumberLong(0),
    "ok" : 0,
    "errmsg" : "error processing query: ns=mytestnodedb.postsTree: GEONEAR  field=product.location.geometry maxdist=1.79769e+308 isNearSphere=0\nSort: {}\nProj: {}\n planner returned error: unable to find index for $geoNear query",
    "code" : 2
}

我无法识别查询中的任何错误。 Mongo声称$near必须是经度,然后是纬度,我肯定在做。我故意遗漏$maxDistance,因为Mongo声明它将返回结果sorted from nearest to farthest

1 个答案:

答案 0 :(得分:1)

错误是非常自我解释的。查询需要2d索引,但无法找到。

我将索引创建为:

db.collection.createIndex({"product.location.geometry":"2d"})

现在,如果我对样本数据运行查询,我会得到

{ 
    "_id" : ObjectId("5760fe623f6d3ad25e387ffc"), 
    "type" : 5.0, 
    "product" : {
        "location" : {
            "geometry" : [
                153.39999999999998, 
                -28.016667
            ], 
            "name" : "Gold Coast QLD, Australia", 
            "id" : "ChIJt2BdK0cakWsRcK_e81qjAgM"
        }
    }
}