2011-03-10 56 views
0

日安親愛的同事們,我決定將一些項目從MySQL遷移到MongoDB中,面臨一些困難:相關要求的MySQL,模擬MongoDB中

例如有兩個表在MySQL:

用戶:

CREATE TABLE `testdb`.`users` (
`id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY , 
`name` VARCHAR(55) NOT NULL , 
`password` VARCHAR(32) NOT NULL 
) ENGINE = MYISAM 

規則:

CREATE TABLE `testdb`.`rules` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , 
`uid` INT NOT NULL , 
`title` VARCHAR(155) NOT NULL , 
`points` INT NOT NULL 
) ENGINE = MYISAM 

我們選擇所有「規則」,這屬於paticular用戶,我可以讓SQL請求:

SELECT r.`title`, r.`points` FROM `rules` r, `users` u WHERE r.`uid` = u.`id` AND u.`id` = '123' 

到現在爲止,我無法弄清楚如何做同樣在MongoDB中,能否請您解釋並提供了一個例子。

P.S.在pymongo的幫助下,我使用Python進行實現 P.P.S.我也想看看ORM mongoengine或mongokit幫助解決這個問題的其他方法。

預先感謝您:)

回答

2

的MongoDB不支持聯接,不像RDBMS的像MySQL。那是因爲MongoDB不是關係數據庫。因此,在RDBMS中以與RDBMS相同的方式對MongoDB中的數據進行建模通常是一個壞主意 - 您必須以完全不同的思維方式設計您的模式。

例如,在這種情況下,在MongoDB中,每個用戶可以有1個文檔,每個用戶的規則都包含在內部。

例如

{ 
    "ID" : 1, 
    "name" : "John", 
    "password" : "eek hope this is secure", 
    "rules": [ 
     { 
      "ID" : 1, 
      "Title" : "Rule 1", 
      "Points" : 100 
     }, 
     { 
      "ID" : 2, 
      "Title" : "Rule 2", 
      "Points" : 200 
     } 
    ] 
} 

這意味着,您只需要一次讀取就可以撤回用戶及其所有規則。

一個很好的出發點是關於Schema Design的Mongodb.org參考 - 我在上面討論的是嵌入對象。