如何查询具有关系的不同集合?

时间:2013-09-10 19:53:52

标签: python mongodb mongoengine

应用技术: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}

最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

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

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

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

此架构的优势在于您无需在人员及其地址之间执行连接 - 它们始终位于单个文档中。通常应根据您的数据访问模式选择模式,但在这种特殊情况下(人们往往只有很少的地址和地址可能不在人们之间共享),几乎可以保证上述模式更适合MongoDB的。