多索引数据的mongodb地理空间查询

Posted

技术标签:

【中文标题】多索引数据的mongodb地理空间查询【英文标题】:mongodb geospatial query for multyindex data 【发布时间】:2017-01-25 08:41:33 【问题描述】:

我有一个这样的集合:

db.records.save( name : "John Smith", addresses : [ context : "home" , loc : [ 55.5, 42.3 ] , context : "work", loc : [ -74 , 44.74 ] ] )

我已经创建了一个这样的索引:

db.records.createIndex( "addresses.loc": "2d" )

现在当我尝试进行如下查询时:

db.Company.findOne( "stores.loc" : $near :[55.5, 42.3])

我期望得到的是带有一系列地址的 john smite,只有相关地址,我得到的是带有所有地址的 john smite,所以我不知道。

我该如何解决这个问题?

【问题讨论】:

在一个文件中包含 John 的所有地址是否有任何具体原因? 因为所有这些位置都在一个文档中,所以它会在[55.5, 42.3] 附近找到文档并返回整个文档。也许考虑“扁平化”架构(即每个地址使用一个文档)。 【参考方案1】:

如果您可以更改架构以在文档中获取一个地址并从那里获取最近的节点,则可以解决此问题:

db.records.save( 
  name : "John Smith",
  address_context: "home",
  address_loc : [ 55.5, 42.3 ]
 )

db.records.save( 
  name : "John Smith",
  address_context: "work",
  address_loc : [ -74 , 44.74  ]
 )

现在在address_loc上创建一个索引并查询,你将得到相关的最近节点

【讨论】:

以上是关于多索引数据的mongodb地理空间查询的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB中是不是有类似反向地理空间查询的东西?

MongoDB地理空间查询结果未按距离顺序排列

使用 NodeJs 的 Mongodb 地理空间查询(Haversine 公式)

使用 NodeJs 的 Mongodb 地理空间查询(Haversine 公式)

MongoDB 对地理空间查询的计数不准确

使用 Doctrine MongoDB ODM 进行地理空间查询