2016-08-01 46 views
0

我正在爲Symfony2/mongodb中的第一個應用程序工作,我必須存儲文章,這些文章包含標籤,關鍵字和相關圖像。此刻我存儲這些信息,這樣的:什麼時候使用數組或不在MongoDB中使用它們

"category" : [ 
    "category1", 
    " category2", 
    " category3" 
], 

而且我看到了幾個例子說做

"category" : "category1, category2, category3", 

,所以我猜哪一個是做的最好的方法是什麼?

回答

0

如果你使用數組,那麼你將有以下優點:

  • 您可以通過索引直接訪問每個項目。
  • 您可以使用運營商如$陣列上直接進行查詢,$寧和$ elemMatch

如果你使用一個字符串,那麼你將有:由,

  • 斯普利特爲了把查詢的任何循環
  • 用戶的基於文本的搜索,這是緩慢的

有一件事你必須記住關於在MongoDB文檔中出現的問題是它不應該太大。數組可能會變得非常大,如果它將文檔的大小推到16 MB以上,則會導致問題,因爲對於單個文檔,16 MB是maximum allowed size

在該用例中,可以將數組的內容拆分爲單獨的集合並創建引用。

+0

你是什麼意思準確地「按索引直接訪問每個項目」?你的意思是單個項目的「_id」? 如果我的集合中有數百萬個小文件(少於500k),那麼查詢文檔中的數組值是否會出現問題? 謝謝 – user3174311

+0

「通過索引直接訪問每個項目」,我指的是參考前端操作,例如 - 您可以輕鬆地在控制器中執行數據操作,直接在視圖中循環陣列等。 它如果您的集合中有數百萬個小文檔,那麼查詢文檔中的數組值不應該成爲問題。 我的回答中有一個小的錯字,我已經糾正它。它現在應該更有意義。 – ryder

0

當你實際需要一個數組時,使用字符串是一個非常糟糕的主意。如果你想通過標籤搜索文件,你肯定需要一個數組。但是,當你需要text search(例如,用句子在單詞中搜索單詞)時,字符串是有用的。

相關問題