找到$ nearSphere结果与查询点

时间:2016-03-24 00:09:56

标签: mongodb geolocation mongodb-query aggregation-framework

我的mongoDb中有以下记录:

{
    "_id" : ObjectId("56e63313059484f212a4305f"),
    "title" : "The video title",
    "location" : {
        "coordinates" : [
            -73.9667,
            40.78
        ],
        "type" : "Point"
    },
}

我希望能够在完全位置找到所有积分。 如果我写:

db.videos.find({
  location: {
    '$nearSphere': {
      '$geometry': {
        type: 'Point',
        coordinates: [-73.9667, 40.78]
      },
      '$maxDistance': 0
    }
  }
})[0]

我没有得到任何结果。如果我输入:

db.videos.find({
  location: {
    '$nearSphere': {
      '$geometry': {
        type: 'Point',
        coordinates: [-73.9667, 40.78]
      },
      '$maxDistance': 0.00001
    }
  }
})[0]

我得到了一个结果。

我看了看,然后在文档中没有说maxDistance不能为0。

可以吗?

1 个答案:

答案 0 :(得分:0)

因此有意义的是,设置为0的{​​{3}}将被忽略,就像您没有设置选项一样。

如果您正在寻找"完全匹配"那就问一下。任何描述都不是$nearSphere查询:

db.videos.find({
    "location.coordinates" : [ -73.9667, 40.78 ]
})

当然会返回符合"确切"的文件。位置。

对于更复杂的东西,请改用聚合$maxDistance。它投射距离"你可以在以后的过滤中使用它:

db.videos.aggregate([
    { "$geoNear": {
        "near": {
            "type": "Point",
            "coordinates": [ -73.9667, 40.78 ]
        },
        "distanceField": "distance",
        "spherical": true
    }},
    { "$match": { "distance": 0 } }
])            

因此,初始管道阶段会返回"距离"第二阶段过滤掉该距离实际为0的任何结果。

如果您查询的对象类似于" Polygon"那么您真的应该只需要它。或其他GeoJSON表单与" exact"坐标数组。

将军"确切"阵列匹配应该适合" Point"数据