1

应用技术:Python、MongoEngine、MongoDB。

最近我开始创建一个程序,数据最初存储在关系数据库中。所有数据都以 CSV 文件的形式提供给我,因此我使用mongoimport命令行工具导入了这些文件。它工作得很好,现在我有如下文件:

people_collection (people.csv file):

{
 id: MongoDB ID("84932809849329043"),
 person_id: 1
 name: Foo
}
addresses_collection (addresses.csv file):
{
 id: MongoDB ID("904389408904311"),
 addresses_id: 1,
 addresses_info: street 1 number 100, turkey,
 person_id: 1
}
{
 id: MongoDB ID("72910890434331"),
 addresses_id: 2,
 addresses_info: street 1999 number 595, japan,
 person_id: 1
}

我想我可以通过以下工作流程发布手动参考(在 mongo 文档参考中描述)来完成此操作:

1 - 查询我想要的所有人:

people = [1, 2]

2 - 查询 id 为 1、2 我想要的人的所有地址:

people_addresses = {1: list_of_addresses_person_1, 2: list_of_addresses_person_2}

什么是好方法?

4

1 回答 1

0

您在这里所做的是将关系模式直接携带到 MongoDB 中,这通常不是最佳的。使用 MongoDB,您可以创建更复杂的嵌套文档,因此您无需求助于经典的规范化表。

在您的示例中,您可以将地址直接嵌入人员文档中:

{
    people_id: 1,
    name: "Foo",
    addresses : [
      { 
         address_info : "....."
      },
      {
         address_info : "....."
      }
    ]
}

这种模式的优点是您不需要在人员和他们的地址之间执行连接——他们总是在一个文档中。通常应该根据您的数据访问模式选择架构,但在这种特殊情况下(人们往往拥有很少的地址并且地址可能不会在人与人之间共享),几乎可以保证上述架构更适合MongoDB。

于 2013-09-10T21:04:48.833 回答