我需要在我的Document中有一个简单的数组/字符串集合,但是无法通过Doctrine ODM实现这一点。
这是一个示例类/文档,$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")
之类的不同内容我知道最后一个没有理由工作,但我只是在尝试任何我能想到的事情。
作为JSON的Mongo DB的最终结果就像这样简单:
{
"_id": ObjectId("a0afa410caeea70de1000000"),
"name": "Example Name",
"tags": ["tag1", "example", "test tag"]
}
我需要帮助的是,如何使用@MongoDB \ EmbedMany注释来允许我只将字符串添加到Collection中,当持久化到DB时,它将看起来像上面的JSON。
我希望有人可以提供帮助,因为我现在真的很难受。感觉应该这么简单!
答案 0 :(得分:4)
Doctrine MongoDB ODM调用数组“Hash”的映射类型,这有点令人困惑。你的课程看起来像这样:
namespace Acme\ExampleBundle\Document;
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
/** @MongoDB\Document */
class MyDocument {
// ...
/** @MongoDB\Hash */
protected $tags = array();
}
如您在问题中所述,刷新到MongoDB应该会在您的集合中存储一个哈希值。
如需进一步参考,请查看HashType implementation
答案 1 :(得分:1)
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;
}