3

我需要在我的文档中有一个简单的字符串数组/集合,但无法通过 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")我知道最后一个没有理由工作,但我只是在尝试我能想到的任何事情。

Mongo DB 作为 JSON 的最终结果就像这样简单:

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

我需要帮助的是,如何使用 @MongoDB\EmbedMany 批注以允许我仅将字符串添加到集合中,然后将其保存到数据库时看起来像上面的 JSON。

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

4

2 回答 2

4

Doctrine 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 实现

于 2012-11-25T15:31:15.767 回答
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;
}
于 2017-11-14T19:24:28.443 回答