在MongoDB文档中嵌入许多字符串?

时间:2012-11-24 13:20:59

标签: php mongodb symfony doctrine-odm doctrine-mongodb

我需要在我的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。

我希望有人可以提供帮助,因为我现在真的很难受。感觉应该这么简单!

2 个答案:

答案 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;
}