2012-09-21 24 views
0

我在MongoDB的映射類型哈希,名爲「meta_info」它只是持有的東西鍵/值列表,我想它做的形式Symfony2中可動態增強(與JS),把它看(基本上)是這樣的:主義MongoDB的散列類型爲Symfony的增強鍵/值形式2.1

<input type="text" name="meta_info[key][]" /><input type="text" name="meta_info[field][]"> [- remove row] 
<input type="text" name="meta_info[key][]" /><input type="text" name="meta_info[field][]"> [+ add row] 

我的第一個想法是提出兩個文本框(鍵/值),可以使用JS被複制(那不是問題),並且被轉換爲JSON字符串的onsubmit和轉換回我的文檔類的我的setter方法裏的數組。不過,這似乎有點髒..

我也想嵌入形式(其與嵌入文檔現在sf2.1效果非常好!) - 但我不知道如何做到這一點的一個簡單的鍵/值散列(應該也可以存儲一樣,在MongoDB的)

感謝您的任何想法和做法!

回答

1

根據Symfony形式考慮這個問題,您可能希望有一個內部形式的動態collection,其中每個都有鍵和值輸入字段。我想不出另一個實現來處理這種情況,因爲你基本上是通過使用散列字段來描述模式的任何概念。這主要是將這種情況與ODM中的嵌入式文檔區分開來(即將映射),即使MongoDB將以相同的方式存儲(嵌套對象)。

一種替代實現是有包含鍵和值的屬性文件的EmbedMany關係。 OpenSky在內部使用它來表示產品屬性。它消耗MongoDB的文檔中的位更多的存儲空間,因爲你有對象與keyvalue領域,而不是鍵/值對單個對象的數組,但也有一些明顯的好處:

  • 結構可以被映射,這與現有的ODM架構很好地搭配。
  • 既然你已經爲每個鍵/值對的模型,它是更自然Symfony的形式來表示此。
  • 也許最重要的是,如果您要通過此數據進行查詢,則可以利用multi-key indexing來索引動態密鑰和值,然後使用$elemMatch查詢進行鍵/值查找。如果您只是使用帶有動態鍵的散列字段,那麼索引多個鍵將不會有直接的方式(每個不同的字段路徑需要顯式索引,或者在複合索引中明確提及)。
+0

我也在想嵌入許多帶有鍵/值屬性的文檔..我會試試看,非常感謝 – con