根据mongoDB文档 (link) 如果要将地理空间信息存储在文档字段中,则有两个选项,即数组或嵌入文档,顺序应始终为经度,纬度。
如果我想使用嵌入式文档,我该如何确保字段的顺序?
或者嵌入文档中的字段是否必须具有特定名称?
答案 0 :(得分:32)
,无论嵌入文档中字段的名称如何,第一个字段都应包含经度值,第二个字段应包含纬度值。例如:
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 字段将是纬度。
此致
答案 1 :(得分:32)
2D Geospatial Index, Store Location Data
“所有文档必须以相同的顺序存储位置数据。如果使用纬度和经度作为坐标系,始终存储经度 .MongoDB的2d球形索引运算符仅识别[经度,纬度]排序。“
Here's a good post about Geospatial Queries in MongoDB万一你需要它。
答案 2 :(得分:7)
我建议您为自己的字段命名:x and y
,而不是longitude/latitude
,因为在更新后,经度和纬度将按字母顺序重新排序,因此反转。
答案 3 :(得分:2)
地理空间索引允许我们根据地理位置查找内容。
我们有2个选项:
在二维中,我们有x
&笛卡尔飞机。 y
坐标和一堆不同的对象。
该文档需要存储某种x
,y
位置ensureIndex({'location':'2d', 'type':1})
。
type
(可选)选项指定索引的方向,即升序或降序。它可以是复合指数。
使用示例:
要查找附近的位置,请使用命令:
db.collectionName.find({location: {$near:[x,y]}})
在实践中,经常使用的方式是limit
。要将结果限制为例如 20 ,请附加.limit(20)
。
db.collectionName.find({location: {$near:[x,y]}}).limit(20)
答案 4 :(得分:1)
MongoDB文档说明如下:
一个名为坐标的字段,用于指定对象的坐标。 如果指定纬度和经度坐标,请先列出经度和然后是纬度:
有效经度值介于-180和180之间(包括两者)。 有效纬度值介于-90和90之间(包括两者)。
Oficial MongoDB文档:https://docs.mongodb.com/manual/geospatial-queries/#geospatial-indexes