【问题标题】:mongodb geospatial queryMongoDB地理空间查询
【发布时间】:2015-06-07 14:43:57
【问题描述】:

我有一个结构如下的 mongodb 集合:

/* 1 */
{
  "_id" : ObjectId("551c53f3ecba12e015000045"),
  "nome" : "istituzione1",
  "username" : "username1",
  "email" : "some@email.it",
  "pwd" : "189bbbb00c5f1fb7fba9ad9285f193d1",
  "punti" : [{
      "punto_id" : ObjectId("551c5415ecba12e015000046"),
      "nome" : "ORACLE",
      "loc" : [-122.262168, 37.531595],
      "icona" : 2,
      "youtubelink" : "",
      "immagini" : [{
          "imgid" : ObjectId("551c5d3eecba12e015000084"),
          "contenttype" : "image/jpeg"
        }, {
          "imgid" : ObjectId("551c5d96ecba12e01500008a"),
          "contenttype" : "image/jpeg"
        }]
    }, {
      "punto_id" : ObjectId("551c5420ecba12e015000047"),
      "nome" : "GOOGLE\r\n",
      "loc" : [-122.083983, 37.422969],
      "icona" : 2,
      "youtubelink" : "",
      "immagini" : []
    }, {
      "punto_id" : ObjectId("551c5d74ecba12e015000089"),
      "nome" : "YAHOO",
      "loc" : [-122.025061, 37.428061],
      "icona" : 1,
      "youtubelink" : "",
      "immagini" : [{
          "imgid" : ObjectId("551c5da4ecba12e01500008e"),
          "contenttype" : "image/jpeg"
        }, {
          "imgid" : ObjectId("551c5daaecba12e015000092"),
          "contenttype" : "image/jpeg"
        }, {
          "name" : "Penguins.jpg",
          "imgid" : ObjectId("551c5dfeecba12e015000096"),
          "contenttype" : "image/jpeg"
        }]
    }]
}

我在“punti”内的“loc”数组上创建了一个二维索引,我正在尝试这样的地理空间查询:

db.istituzioni.find({ "punti.loc" : { $geoWithin : { $centerSphere : [ [ -121.931076, 37.364700 ], 14.5 / 6371 ] } } })

这个查询应该只返回“punti”的元素,字段“nome”设置为“YAHOO”(我验证了这创建了一个仅包含“loc”和“nome”字段的其他集合),但它返回整个收藏。
我尝试了不同的 km 值,发现值 >= 10.9 km 它返回整个集合,而如果值 我做错了什么?

【问题讨论】:

    标签: mongodb geospatial


    【解决方案1】:

    查询返回文档,而不是文档中的数组元素。如果您希望查询仅返回 punti 的元素,则应更改文档结构或使用 punti 元素填充另一个集合。

    您还可以在投影中使用 $ 位置运算符来返回 punti 数组,其中仅包含与查询条件匹配的第一个元素:

    db.istituzioni.find(
        { "punti.loc" : { $geoWithin : { $centerSphere : [ [ -121.931076, 37.364700 ], 14.5 / 6371 ] } } },
        { "punti.$" : 1 }
    )
    

    【讨论】:

      猜你喜欢
      • 2019-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-23
      • 1970-01-01
      • 2017-01-25
      • 2019-01-30
      相关资源
      最近更新 更多