Geonear不工作-mongodb?

Geonear不工作-mongodb?,mongodb,geolocation,geo,Mongodb,Geolocation,Geo,我有以下mongodb文档样本 收藏:优惠 要求: 根据半径约50公里的地理位置获取文档 我所尝试的: 问题: 它正在获取所有文档,而不是搜索大约50公里 任何建议都将不胜感激 传统坐标对返回的距离不是米,而是弧度。因此,您的最大距离远大于50公里。看 也要考虑这里使用的实际距离: db.getCollection'offers'。聚合[ { $geoNear:{ 近:[6.09509949999999,49.891411400000026], 距离字段:距离 } ]; 返回: { _id:Ob

我有以下mongodb文档样本

收藏:优惠 要求: 根据半径约50公里的地理位置获取文档

我所尝试的: 问题: 它正在获取所有文档,而不是搜索大约50公里


任何建议都将不胜感激

传统坐标对返回的距离不是米,而是弧度。因此,您的最大距离远大于50公里。看

也要考虑这里使用的实际距离:

db.getCollection'offers'。聚合[ { $geoNear:{ 近:[6.09509949999999,49.891411400000026], 距离字段:距离 } ]; 返回:

{ _id:Objected55DC0F4B6F07AD5D3EC3B6D0, 国家代码:DE, 地理位置:[ { 纬度:50.8218537, 液化天然气:9.0201510000001 } ], 距离:60.588259822017925 } { _id:Objected55DC0F4B6F07AD5D3EC3B6CF, 国家代码:卢,, 地理位置:[ { 拉脱维亚:49.8914114, 液化天然气:6.0950995 } ], 距离:61.93733827090219 } 因为“距离”字段是报告与查询点的投影距离的字段

因此,起点是您的文档对于地理空间查询无效。请按如下方式修复它们:

首先删除所有索引:

db.offers.dropindex; 然后修复字段:

var bulk=db.offers.initializeOrderedBulkOp, 计数=0; db.offers.find{}.forEachfunctiondoc{ //printjsondoc; var tmp={ 类型:点, 坐标:[doc.geology[0].lng,doc.geology[0].lat] }; doc.geoLocation=tmp; printjsondoc; bulk.find{u-id:doc.\u-id}.updateOne{ $set:{geoLocation:doc.geoLocation} }; 计数++; 如果计数%1000==0{ 批量执行; bulk=db.offers.initializeOrderedBulkOp; } }; 现在,数据以正确的GeoJSON格式表示:

{ _id:Objected55DC14856F07AD5D3EC3B6D1, 国家代码:卢,, 地理位置:{ 类型:点, 坐标:[ 6.0950995, 49.8914114 ] } } { _id:Objected55DC14856F07AD5D3EC3B6D2, 国家代码:DE, 地理位置:{ 类型:点, 坐标:[ 9.020215100000001, 50.8218537 ] } } 现在将索引创建为2dsphere:

db.offers.createIndex{geoLocation:2dsphere} 现在,您可以查询:

db.offers.aggregate[ {$geoNear:{ 近:{ 类型:点, 坐标:[6.09509949999999,49.891411400000026] }, 距离字段:距离, 对,, 最大距离:50000 }} ] 它返回一个接近或实际上为0距离的文档:

{ _id:Objected55DC14856F07AD5D3EC3B6D1, 国家代码:卢,, 地理位置:{ 类型:点, 坐标:[ 6.0950995, 49.8914114 ] }, 距离:0 }
感谢您提供的信息,但上述查询不会返回任何信息resultset@karthick.k请参阅上面的信息。您也错误地使用了$geoNear。谢谢,但以下查询无法使用maxDistance,db.getCollection'offers'。聚合[{$geoNear:{near:[6.095099499999999,49.891411400000026],distanceField:distance,maxDistance:50/6378.1}];@karthigh.k这里有很多错误,不仅仅是一个错误。现在的答案是解决所有问题的完整指南。仅供参考,这个答案也适用于嵌套结构。谢谢Blakes。
 {
   "countryCode" : "LU",
   "geoLocation" : [ 
         {
            "lat" : 49.8914114000000026,
            "lng" : 6.0950994999999999
         }
    ]
 },
 {
   "countryCode" : "DE",
   "geoLocation" : [ 
         {
            "lat" : 50.8218536999999984,
            "lng" : 9.0202151000000015
         }
    ]
 }
db.getCollection('offers').aggregate([
    {
        $geoNear: {
            near: [6.0950994999999999, 49.8914114000000026],
            distanceField: "geoLocation",
            maxDistance: 50000, //50 km radius
        }
    }
]);