我想找到解决问题的最佳方法。我不知道在我的情况下使用MongoDB的最佳方法。
我目前在Meteor JS中开发了一个项目,并且(想要)使用mongoDB。在网站上有一个输入字段,其中有自动完成。
(仅针对德国))函数应该是这样的:
你可以输入你的邮政编码,它会找到自动完成与城市在其中。如。"10789年柏林"
你也可以在里面输入"Berlin"或一条街,或者——如果你想的话——你的当前位置由浏览器检测。
在这个时候,我有一个MYSQL的大数据库,有数百万的地理数据。我有数以百万计的地址与邮政编码,城市和地理数据。我想用它来自动完成数据,并在输入地址后找到GEO代码。
我的问题是现在如何构建我的mongodb集合。所有信息都在一个集合中?还是我必须把它分成多个集合?例1邮编、城市及街道(含街道号码?)资料收集。
像这样:
streets:
{
streetname : 'Sandsteinweg',
geocode : 'GEOCODE',
zip : 12349
}
plz : {
plz : 12349,
geocode: 'GEOCODE',
city : berlin
}
citys :
{
name : Berlin,
geocode : 'GEOCODE',
bundesland : 'Berlin'
}
对于最好的方法有什么想法或建议吗?
顺便说一句:我不想使用外部服务。只有当街道名称不在我的集合中,并且我必须将其添加到尚未在我的集合中新的地理信息中时,才会使用外部服务。这样做与MongoDB它听起来像你想使用"文本搜索"或以其他方式使用搜索引擎。这是"自动建议"(而不是"自动完成")等操作的通常情况,因为在这种情况下会显示"相关匹配"。
因此,无论如何,您可能希望在同一个文档中有不同类型的字段。至少在MongoDB文本索引的情况下,这将是必须的情况,以及最简单的集成。在任何一种情况下,你的"搜索"都将在这些多个字段值上执行,并按照相关性的顺序返回结果。
很大程度上,你的问题似乎更多的是关于"自动建议"点,而不是GEO存储部分。有几个选项可用于"地理"数据,你可以在文档中找到它们。
然而,这里可能存在的冲突点是,每个集合只能有一个诸如2dSphere索引之类的东西。因此,需要对每个集合只有一个"GEO"数据系列的文档进行"键"。
但是你的集合文档有点"多态"也没有错,所以这是需要考虑的。
很难更详细地回答您当前的问题,因为主题相当广泛,如果没有您"缩小"到更具体的情况。我只在这里写这个,因为对于注释来说它太长了