2010-07-13 34 views
3

我對使用MongoDB非常感興趣,它看起來很棒。但我來自一個完全不同的學校:關係數據庫。來自SQL用戶的關於MongoDB的問題

所以,現在我不知道怎麼會有這種情況下,可與MongoDB的:

說,我充滿了品牌的表,我有裝滿產品的另一個表。

每個產品都會有一個品牌。這很容易理解,但我仍然不明白這將如何適用於MongoDB?

我的意思是,每次添加產品時都需要重複品牌嗎?我可以做某種關係嗎?

感謝啓發我:)

+0

檢查由sriehl答案。我相信是對的 – 2012-04-03 20:09:04

回答

2
  1. 插入品牌
  2. 插入插入產品(品牌)
  3. 查詢它

準備:

  • 下載http://www.mongodb.org/downloads
  • 在Windows上創建目錄c:\data\db\(默認dir,不在乎現在)
  • 運行的mongod(它會運行一個服務器)
  • 運行蒙戈(它會運行一個客戶端,並使用默認的測試數據庫)

品牌:

db.things.save({'name': 'Ford'}); 
db.things.save({'name': 'Mitsubishi'}); 

產品:

db.things.save({'brand': 'Ford', 'name': 'Mustang'}); 
db.things.save({'brand': 'Ford', 'name': 'Falcon'}); 
db.things.save({'brand': 'Mitsubishi', 'name': 'Delica'}); 
db.things.save({'brand': 'Mitsubishi', 'name': 'L300'}); 

查詢:

db.things.find(); 
db.things.find({'brand': 'Ford'}); 
db.things.find({'brand': 'Mitsubishi'}); 

//我剛學過這個(包括下載等)幾乎在第一個答案從tutorialmanual一般發佈之前。不錯的體驗:)

+0

感謝您的答案。但是,如果我需要重命名一個品牌呢?它是否在整個數據庫中創造了許多品牌的入口,或者它只是引用了它? – TomShreds 2010-07-13 20:23:39

+0

重命名:'db.things.update({「name」:「L300」},{「brand」:「Mitsubishi」,「name」:「L300 4WD」});'''''''對象並引用它。 每一個條目都包含ObjectId「_id」,這對我來說似乎一直如此,所以我想它會更新這個條目而不是刪除和插入它。 – dwich 2010-07-13 20:36:24

+0

@Tom:Tom,下載並使用它,使用我的示例作爲起點,將它們複製並粘貼到mongo命令行(允許多行!)。你會更好地理解它,強烈推薦:) – dwich 2010-07-13 20:38:35

3

的一種方法是將它設置與此類似:

{'brand':'brand one', 'products': 
         [{'product name':'a fine product','price':'$50'}, 
         {'product name':'yet another fine product','price':'$20'}] 
}, 
{'brand':'brand two', 'products': 
         [{'product name':'brand two product','price':'$10'}] 
} 

在這種情況下,你只能有一個「表」你需要的所有信息產品(包括品牌)。我只做了一些mongodb的實驗,所以我不確定這將如何擴展。

這是一種從關係數據庫中思考的不同方式,不應在所有情況下使用nosql解決方案。

+0

哦!好吧,所以你告訴我的是我的「關係」「應該以我的方式」對齊「我的模型?從最高到最低,所以它會這樣: 博客 - >作者 - >文章 - >評論。 這很漂亮!所以我總是有我需要的一切...感謝您的幫助:) – TomShreds 2010-07-13 20:18:18

+0

這是一個更好的答案 – 2012-04-03 20:07:59