应用技术: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}
最好的方法是什么?
答案 0 :(得分:0)
你在这里做的是将关系模式直接带入MongoDB,这通常不是最佳的。使用MongoDB,您可以创建更复杂的嵌套文档,因此您无需使用经典的规范化表。
在您的示例中,您可以将地址直接嵌入到人员文档中:
{
people_id: 1,
name: "Foo",
addresses : [
{
address_info : "....."
},
{
address_info : "....."
}
]
}
此架构的优势在于您无需在人员及其地址之间执行连接 - 它们始终位于单个文档中。通常应根据您的数据访问模式选择模式,但在这种特殊情况下(人们往往只有很少的地址和地址可能不在人们之间共享),几乎可以保证上述模式更适合MongoDB的。