Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在MongoDB文档中嵌入多个字符串?_Php_Mongodb_Symfony_Doctrine Odm_Doctrine Mongodb - Fatal编程技术网

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

Php 在MongoDB文档中嵌入多个字符串?,php,mongodb,symfony,doctrine-odm,doctrine-mongodb,Php,Mongodb,Symfony,Doctrine Odm,Doctrine Mongodb,我需要在我的文档中有一个简单的字符串数组/集合,但无法通过ODM找到实现这一点的方法 这是一个示例类/文档,$tags需要是一个简单的字符串数组: namespace Acme\ExampleBundle\Document; use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB; /** @MongoDB\Document */ class MyDocument { /** @MongoDB\Id */ protect

我需要在我的文档中有一个简单的字符串数组/集合,但无法通过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\embedmanny
@MongoDB\embedmanny(targetDocument=“String”)
我知道没有理由让最后一个有效,但我只是在尝试我能想到的任何方法

Mongo DB作为JSON的最终结果如下所示:

{
    "_id": ObjectId("a0afa410caeea70de1000000"),
    "name": "Example Name",
    "tags": ["tag1", "example", "test tag"]
}
我需要的帮助是,如何使用@MongoDB\EmbedMany注释,以便只向集合中添加字符串,当将字符串持久化到DB中时,它将与上面的JSON类似


我希望有人能帮上忙,因为我现在真的被困在这里了。感觉应该很简单

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将导致在您的集合中存储一个散列,如您在问题中所述

如需进一步参考,请查看也
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;
}

如果最后一个应该是JSON,那么数组应该是[]而不是{},后者是一个单独的嵌入文档,这不是合法的语法。感谢您发现ASIA。我现在已经编辑了这个问题。我想你必须定义一个新的子文档数据验证模型,然后将该模型作为一个嵌入项附加到其父模型中。是的,就是这样。。。非常感谢你!我一直在努力解决这个问题。我已经查看了annotations文件夹,但是完全没有找到散列类型(我想我忽略了它是因为它的名称)。我在试图解决这个问题的文档上有一个公开的PR。命名很愚蠢,据我所知,甚至没有正确的文档记录。