MongoDB - 如何使用GEO和地址的最佳方式?

时间:2014-03-22 05:30:53

标签: javascript mongodb meteor mongodb-query

我想找到解决问题的最佳方法。我不知道在我的情况下使用MongoDB的最佳方法。

我目前在Meteor JS中开发了一个项目并且(希望)使用mongoDB。在网站上是一个输入字段,其中包含自动填充功能。

((仅针对德国)) 功能应该是这样的:

您可以输入您的邮政编码,它会找到包含城市的自动填充功能。例如“10789柏林”

您也可以在其中输入“柏林”或街道或 - 如果您需要 - 您当前通过浏览器检测到位置。

目前,我在MYSQL中拥有一个拥有数百万地理数据的大型数据库。我有邮政编码,城市和GEO-Data的数百万个地址。我想用它来自动填充数据并在输入地址后找到GEO代码。

我现在的问题是如何构建我的MongoDB-Collection。一个集合中的所有信息?或者我是否必须将其拆分为多个集合?例如1邮政编码,城市和街道的集合(街道号码?)。

这样的事情:

streets:
{
    streetname : 'Sandsteinweg',
    geocode : 'GEOCODE',
    zip : 12349
}

plz : {
    plz : 12349,
    geocode: 'GEOCODE',
    city : berlin

}

citys :
{
    name : Berlin,
    geocode : 'GEOCODE',
    bundesland : 'Berlin'
}

任何想法或输入最好的方法吗?

BTW:我不想使用外部服务。当街道名称不在我的收藏中时,外部服务才被使用,我必须添加新的地理信息,而这些信息还不在我的收藏中。

1 个答案:

答案 0 :(得分:3)

使用MongoDB执行此操作听起来好像要使用"text search"或以其他方式使用搜索引擎。这是通常的情况,例如“自动建议”(与“自动完成”相反),因为在这种情况下会出现“相关匹配”。

因此无论如何,您可能希望在同一文档中使用各种类型的字段。至少在MongoDB文本索引的情况下,必须是这种情况,并且是最简单的集成。在任何一种情况下,您的“搜索”都将在这些多个字段值上执行,并按相关性顺序返回结果。

很大程度上,您的问题似乎更多地是关于GEO存储部分的“自动建议”点。 “地理”数据有多种选项,您可以在documentation中找到它们。

然而,这里可能相互矛盾的一点是,每个集合只能有一个2dSphere索引。因此,需要对每个集合中只有一系列“GEO”数据的文档进行“键控”。

但是你的收藏文件有点“多态”也没有错,所以有需要考虑。

由于主题相当广泛,而您没有“缩小”到更具体的案例,因此很难更详细地回答您当前的问题。我真的只有这里,因为评论太长了。