2012-11-24 64 views
3

我需要有一個簡單的字符串數組/集合在我的文檔,但無法制定出一個辦法與學說ODM來達致這。EmbedMany字符串在MongoDB文檔中?

這是一個示例類/文件,以$tags需要是一個簡單的字符串數組:

namespace Acme\ExampleBundle\Document; 
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB; 

/** @MongoDB\Document */ 
class MyDocument { 

    /** @MongoDB\Id */ 
    protected $id; 

    /** @MongoDB\String */ 
    protected $name; 

    /** @MongoDB\EmbedMany */ 
    protected $tags = array(); 
} 

我已經試過像@MongoDB\EmbedMany@MongoDB\EmbedMany(targetDocument="String")我知道有不同的事情是沒有理由的最後一個去工作,但我正在嘗試任何我能想到的事情。

最終結果在蒙戈DB作爲JSON是如此簡單:

{ 
    "_id": ObjectId("a0afa410caeea70de1000000"), 
    "name": "Example Name", 
    "tags": ["tag1", "example", "test tag"] 
} 

我需要幫助,如何有@MongoDB \ EmbedMany註解,讓我只字符串添加到集合,然後看起來像上面的JSON時堅持到數據庫。

我希望有人能幫助,因爲我真的堅持這個現在。感覺就像它應該那麼簡單!

+0

如果最後一個應該是JSON那麼陣列將[]不{} - 後者是一個單獨的嵌入式文檔,對此,這不是合法的語法。 –

+0

感謝您發現Asya。我現在編輯了這個問題。 –

+0

我想你必須爲子文檔的數據驗證定義一個新模型,然後將該模型作爲embedMany添加到其父模型中。 – Sammaye

回答

4

學說的MongoDB ODM要求陣列「散列」,這是有點混亂的映射類型。你的班級應該是這樣的:

namespace Acme\ExampleBundle\Document; 
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB; 

/** @MongoDB\Document */ 
class MyDocument { 

    // ... 

    /** @MongoDB\Hash */ 
    protected $tags = array(); 
} 

刷新到MongoDB應該會導致一個哈希存儲在你的集合裏,就像你在你的問題中描述的那樣。

更多參考,看看在HashType implementation

+0

是的,就是這樣...非常感謝!我一直在嘗試解決這個問題已有很多年了。我查看了註釋文件夾,但完全錯過了哈希類型(我認爲我忽略了它的名稱)。 –

+0

名稱很混亂。我在試圖解決此問題的文檔上有公開的公關。 – Sgoettschkes

+0

命名是愚蠢的,甚至沒有正確記錄,據我所知。 – VSG24

0

type="collection"工作方式相同散列

/** 
* @MongoDB\Field(type="collection") 
*/ 

protected $possibleTags; 

/** 
* Set tags 
* 
* @param collection $possibleTags 
* @return $this 
*/ 
public function setPossibleTags($possibleTags) 
{ 
    $this->possibleTags = $possibleTags; 
    return $this; 
} 

/** 
* Get tags 
* 
* @return collection $tags 
*/ 
public function getPossibleTags() 
{ 
    return $this->possibleTags; 
}