2012-10-17 33 views

回答

13

如果您需要存儲未映射到數組中的文檔類的值,則可以使用映射到MongoDB中的基本數組的collection字段映射。還有一個hash類型,它類似地將PHP中的關聯數組轉換爲MongoDB中的對象,而不映射其中的任何內容。

如果示例中的「類型」是映射文檔類,那麼您需要使用EmbedMany關係,該關係將一個或多個映射文檔存儲在父文檔的數組中。在MongoDB中,這將被表示爲一個對象數組,這與您對collection字段(存儲關聯數組數組)的操作類似。但是,ODM將利用EmbedMany映射將這些對象恢復爲文檔實例。

+0

爲我工作表示感謝。不清楚爲什麼它沒有在文檔中指定http://docs.doctrine-project.org/projects/doctrine-mongodb-odm/en/latest/reference/basic-mapping.html#doctrine-mapping-types –

+0

什麼樣的我們應該使用映射來更新數組以添加另一個鍵:value元素? – Sekai

+0

@Sekai:我不明白這個問題。在將其寫入MongoDB字段之前,''collection'類型通過'array_values()'運行PHP值(以數字方式重新索引鍵)。 'hash'策略將PHP值轉換爲一個對象(即PHP中的stdClass),以確保將其保存爲BSON對象。集合/散列值中的鍵/值對都沒有映射(這就是將這些與嵌入式文檔(EmbedOne和EmbedMany)區分開來的原因) – jmikola

4
... 
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB; 
... 
class MyClass 
{ 
    /** 
    * @MongoDB\Hash 
    */ 
    protected $tags = array(); 
} 

此外,你可以檢查出BSPTagBundle如果你想要一個表單類型,可以幫助您與該類型的變量。

5

您可以根據需要使用mongo類型的散列或集合。

散列值:存儲並檢索值作爲關聯數組。

集合:以數字索引數組的形式存儲和檢索值。

例如:

use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB; 

class Category 
{ 
    /** 
    * @MongoDB\Field(name="tags", type="collection") 
    */ 
    private $tags; 

    /** 
    * @MongoDB\Field(name="country_wise_total_count", type="hash") 
    */ 
    private $country_wise_total_count; 
} 

的數據存儲,如:

"tags": [ 
    "man", 
    "boy", 
    "male", 
    "sandal", 
    "cloth", 
    "army boots", 
    "boots", 
    "sport shoes", 
    "school", 
    "casual", 
    "office" 
    ], 

"country_wise_total_count": { 
    "NP": NumberInt(7), 
    "US" : NumberInt(10) 
    }