如何使用 Doctrine 和 Mongo DB 存储数组?
我不想要参考文件,只想要数组。
例子:
Type[
Type1,
Type2,
Type3
]
我需要创建新的 Doctrine ODM 数据类型吗?
如果您需要将未映射到文档类的值存储在数组中,则可以使用collection
字段映射,该映射映射到 MongoDB 中的基本数组。还有一种hash
类型,类似地将 PHP 中的关联数组转换为 MongoDB 中的对象,而不在其中映射任何内容。
如果您的示例中的“类型”是一个映射文档类,那么您将需要使用EmbedMany关系,它将一个或多个映射文档存储在父文档内的数组中。在 MongoDB 中,这将被表示为一个对象数组,这类似于您可以自己对collection
字段执行的操作(存储关联数组的数组);但是,ODM 将利用 EmbedMany 映射将这些对象水合回文档实例。
您可以根据需要使用 mongo 类型的哈希或集合。
Hash :以关联数组的形式存储和检索值。
Collection :将值存储和检索为数字索引数组。
例如:
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
class Category
{
/**
* @MongoDB\Field(name="tags", type="collection")
*/
private $tags;
/**
* @MongoDB\Field(name="country_wise_total_count", type="hash")
*/
private $country_wise_total_count;
}
数据存储如下:
"tags": [
"man",
"boy",
"male",
"sandal",
"cloth",
"army boots",
"boots",
"sport shoes",
"school",
"casual",
"office"
],
"country_wise_total_count": {
"NP": NumberInt(7),
"US" : NumberInt(10)
}
...
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
...
class MyClass
{
/**
* @MongoDB\Hash
*/
protected $tags = array();
}
此外,如果您想要一种可以帮助您处理该类型变量的表单类型,您可以查看BSPTagBundle 。