实现$ near query

时间:2016-08-25 13:55:13

标签: mongodb mongodb-query

示例MongoDB文档

{
 "_id":"5adedaad0bd4134kb0",
 "url":"https://iscon.cdnalign.com/t51.288515/s640x640e35/10249200241120_2108192950_n.jpg?ig_cache_key=MTEYUTB1NDgxN",
 "description":"#funinthesun",
 "locationName":"Calamari",
 "statusValue":1,
 "reason":"Related to travel",
 "category":["park"],
 "geo": {
       "index":"Point",
       "coord":[29.123024,77.1999]
  }

}

我根据距离特定点的距离来获取文档。

这是我正在使用的查询,以便文档根据距离而来。

 询问
var collection = db.collection('myData');
collection.ensureIndex({"geo.index":"Point"});
collection.find({ 
  geo :{
       $near : {
          $geometry : {   
             index : "Point" ,
             coord : [30.564058, 76.44762696]
          },
       $maxDistance : 100
      }
   }
}

这显示了这个错误: -     {“name”:“MongoError”,“message”:“地理位置附近的无效点$ geometry参数:{index:\”Point \“,coord:[4.27326978424058,30.4439024447627]}点必须是数组或对象”, “waitedMS”:0,“ok”:0,“errmsg”:“地理位置附近的无效点$ geometry参数:{index:\”Point \“,coord:[4.27326978424058,30.4439024447627]}点必须是数组或对象”, “代码”:2}

2 个答案:

答案 0 :(得分:2)

如果您查看$ near文档https://docs.mongodb.com/manual/reference/operator/query/near/,您会发现此处有两个问题:

  1. 您需要2dsphere类型的索引才能在GPS字段上进行地理查询
  2. geospacial Point必须具有名称坐标属性而不是coor
  3. 以下是适用的代码的正确版本

    var collection = db.collection('myData');
    collection.ensureIndex({"geo":"2dsphere"});
    collection.find({ 
      geo :{
       $near : {
          $geometry : {   
             index : "Point" ,
             coordinates : [30.564058, 76.44762696]
            },
         $maxDistance : 100
        }
      }
    })
    

答案 1 :(得分:1)

https://docs.mongodb.com/manual/reference/operator/query/near/

这里可能有问题但是从docs $ geometry需要两个参数索引和坐标。你有协调。也许这就是问题所在。改变

coord : [30.564058, 76.44762696]

coordinates : [30.564058, 76.44762696]

也可以在DB中更改名称。

希望这有帮助。