【问题标题】:Storing country state city in MongoDB在 MongoDB 中存储国家/地区城市
【发布时间】:2015-11-18 18:43:03
【问题描述】:

我目前正在构建数据库以存储国家-州-城市信息,这些信息稍后将在我们网站的下拉菜单中使用。

我想就我已决定的架构的工作效率获得一些建议。

我正在使用 MongoDB 来存储数据。

我设计的架构如下:

{
_id: "XXXX",
country_name: "XXXX",
some more fields
state_list:[
    {
        state_name: "XXXX",
        some more fields
        city_list:[
            {
                city_name : "XXXX",
                some more fields
            },
            {
                city_name : "XXXX",
                some more fields
            }

        ]

    }
]

}

数据会越来越多。每个州还有一长串城市。

此架构对于预期目的的效果如何?

我应该使用链接文档技术(这需要手动编码来映射_id)?

【问题讨论】:

    标签: mongodb drop-down-menu database nosql


    【解决方案1】:

    我认为随着您的数据增加,此架构将崩溃。最好的方法是将数据库分成 3 个模式并使用它们的 Ids 的引用。

    国家模式:

    {
    _id: "XXXX",
    country_name: "XXXX",
    some more fields
    state_list:[{
      "_id": reference id to state object
    }]
    }
    

    状态模式:

    {
     _id: "XXXX",
     state_name: "XXXX",
     some more fields
     city_list:[{
       "_id" : reference to city object
     }]
    }
    

    城市架构:

    {
     _id: "XXXX",
     city_name: "XXXX",
     some more fields
    

    }

    【讨论】:

    • 为什么这是最好的方式?州和城市名称的数量是否不受限制?这是通过 ID 引用城市的“最佳”方式,还是 OP 应该包括 ID 加名称,以防止多个文档查找?要点是:这是许多可能性中的一种。它们都不是“最好的”方式(因为我们对应用程序及其访问模式一无所知)。这类问题真正征求意见,没有正确答案(这就是为什么这类问题通常被关闭为题外话)。
    【解决方案2】:

    我建议将国家/地区相对于州保持 1-N,而城市与 stateid 分开收集。 您将拥有有限数量的州的每个国家,而州将拥有许多城市。 将城市嵌入到州中,然后将州嵌入到国家中,这会使国家/地区的收藏量过大。 进行模式设计的通用概念基于以下标准:

    1. 1-Few(在这种情况下,将集合嵌入到父对象中。

    2. 1-many(在这种情况下,在父集合中创建 id 数组并将 chil 集合保持为单独的。

    3. 1- scillions(在这种情况下,将父 id 保留在子对象中,并将它们作为单独的集合。

    这个link 解释得更好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-28
      • 2011-10-12
      • 2017-06-30
      • 2012-03-29
      • 2018-07-24
      • 1970-01-01
      • 1970-01-01
      • 2019-08-05
      相关资源
      最近更新 更多