2013-09-10 61 views
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 
} 

我想我可以通過發出下面這個工作流程手冊引用(蒙戈文檔參考)實現這一點:

1 - 查詢我想所有的人:

people = [1, 2] 

2 - 查詢人的所有地址ID爲1,2我想:

people_addresses = {1: list_of_addresses_person_1, 2: list_of_addresses_person_2} 

什麼是最好的方法?

回答

0

你在這裏做的是將關係模式直接帶入MongoDB,這通常不是最優的。使用MongoDB,您可以創建更復雜的嵌套文檔,因此您無需訴諸經典的規範化表格。

在你的榜樣,你可以直接嵌入地址進入了人們的文檔:

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

這個模式的好處是,你並不需要執行人和他們的地址之間的連接 - 他們總是出現在單個文件中。通常應根據您的數據訪問模式來選擇模式,但在這種特殊情況下(人們往往沒有幾個地址和地址可能不會在人們之間共享),則幾乎可以保證上述模式更適合MongoDB的。

+0

好的,我知道它可以更可靠和正確(即使是聰明的),但正如我之前所說,所有的都存儲爲CSV文件,我需要以這種方式處理所有這些集合。 –