【问题标题】:geoNear does not work on Dev ServergeoNear 在开发服务器上不起作用
【发布时间】:2016-12-16 20:56:12
【问题描述】:

我有一个在我的生产服务器上运行良好的 mongo 查询。但它不会在我的开发服务器上返回结果。我在开发服务器上的数据库是实时数据库的副本。

产品 - AWS:
mongo v3.0.7

开发 - 数字海洋
mongo v3.0.9

Mongo 查询(使用 RoboMongo 运行)- 为匿名屏蔽坐标;)

db.getCollection('$cmd').findOne({
  "geoNear": "ProviderData",
  "near": [
    XX.1325611,
    XX.1357446
  ],
  "spherical": true,
  "distanceMultiplier": 6378137,
  "query": {
    "BusinessType": "557ff3f98b424a1009776ba5",
    "Status": "1"
  }
})

应在搜索中返回的文档如下所示(删除不相关的字段):

{
   "_id" : ObjectId("566xxxxxxxxxxxxxxxxxxdb0"),
   "ProviderName" : "Test Fitness Business",
   "BusinessType" : "557ff3f98b424a1009776ba5",
   "Location" : {
      "Longitude" : XX.135745,
      "Latitude" : XX.132561
   },
   "ImageFlag" : "1",
   "Status" : "1",
   "OrderEmail" : "tests@test3.com",
   "Radius" : "12",
   "ParentCompanyName" : "Test Fitness Business",
}

我的 Live 服务器返回上述文档和另外两个文档。在开发服务器上,我得到了

{
   "ok" : 0,
   "errmsg" : "no geo indices for geoNear"
}

我做错了什么?

编辑:其他简单的 CRUD 查询在两台服务器上都可以正常工作。

【问题讨论】:

    标签: php mongodb amazon-web-services digital-ocean


    【解决方案1】:

    如果要执行$geoNear,则必须使用地理索引:2D2DSphere。因此,只需将位置字段索引从生产服务器复制到开发服务器即可。

    【讨论】:

    • 不想问这个,但我该怎么做?
    【解决方案2】:

    Geonear 是一个聚合管道阶段。你应该这样做。

    db.getCollection('trips').aggregate([{
      "$geoNear": {
      "near": {"type":"Point","coordinates":[
        -120.28923776, 
                38.86485915
      ]},
        "distanceMultiplier": 6378137,
    "distanceField": "dist.calculated",
      "key":"start",
        "maxDistance": 200,
      "spherical": true,
      
    }}])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-22
      • 2018-11-24
      • 2017-12-30
      • 2012-02-20
      • 1970-01-01
      相关资源
      最近更新 更多