Вставить много строк в документ MongoDB?
Мне нужен простой массив / набор строк в моем документе, но я не могу найти способ добиться этого с помощью 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.
Я надеюсь, что кто-то может помочь, так как я действительно застрял с этим сейчас. Такое ощущение, что все должно быть так просто!
2 ответа
Доктрина 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
Также 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;
}