31

根据 mongoDB 文档(链接),如果您想在文档字段中存储地理空间信息,您有两个选项,数组或嵌入文档,顺序应始终为经度、纬度。

如果我想使用嵌入文档,如何确保字段的顺序?

或者嵌入文档中的字段是否必须具有特定名称?

4

5 回答 5

34

对于嵌入文档,无论嵌入文档中的字段名称如何,第一个字段应包含经度值,第二个字段应包含纬度值。例如:

 db.zips2.insert( { _id: 1, city: "b", loc: { x: -73.974, y: 40.764 } } )
 db.zips2.insert( { _id: 2, city: "b", loc: { x: -73.981, y: 40.768 } } )

这里的x字段是经度;y字段将是纬度。

问候

于 2013-03-07T17:25:38.627 回答
33

二维地理空间索引,存储位置数据

“所有文档必须以相同的顺序存储位置数据。如果使用纬度和经度作为坐标系,请始终先存储经度。MongoDB 的 2d 球形索引运算符仅识别 [经度,纬度] 排序。”

这是一篇关于 MongoDB 中地理空间查询的好文章,以备不时之需。

于 2013-03-07T17:42:02.300 回答
8

我建议您将字段命名为:x and y,而不是longitude/latitude,因为在更新后,经度和纬度将按字母顺序重新排序,因此倒置。

于 2015-05-15T12:27:07.267 回答
4

MongoDB 文档说如下:

一个名为坐标的字段,用于指定对象的坐标。如果指定纬度和经度坐标,请先列出经度然后再列出纬度

有效的经度值介于 -180 和 180 之间,包括两个值。有效的纬度值介于 -90 和 90(包括两者)之间。

官方 MongoDB 文档:https ://docs.mongodb.com/manual/geospatial-queries/#geospatial-indexes

于 2017-08-27T20:36:40.283 回答
3

地理空间索引使我们能够根据地理位置查找事物。

我们有 2 个选项:

  • 二维
  • 3D

在二维中,我们有一个带有x&y坐标的笛卡尔平面和一堆不同的对象。


二维笛卡尔平面


文档需要存储某种 .x位置yensureIndex({'location':'2d', 'type':1}).

type可选)选项指定索引的方向,即升序或降序。它可以是一个复合索引。

示例用法:

要查找附近的位置,请使用命令:

db.collectionName.find({location: {$near:[x,y]}})

在实践中,通常使用的方式是通过limit. 将结果限制为例如20 append .limit(20)

db.collectionName.find({location: {$near:[x,y]}}).limit(20)
于 2016-09-04T17:12:18.823 回答