8

如何使用 Doctrine 和 Mongo DB 存储数组?

我不想要参考文件,只想要数组。

例子:

Type[ 
     Type1,
     Type2,
     Type3
]

我需要创建新的 Doctrine ODM 数据类型吗?

4

3 回答 3

16

如果您需要将未映射到文档类的值存储在数组中,则可以使用collection字段映射,该映射映射到 MongoDB 中的基本数组。还有一种hash类型,类似地将 PHP 中的关联数组转换为 MongoDB 中的对象,而不在其中映射任何内容。

如果您的示例中的“类型”是一个映射文档类,那么您将需要使用EmbedMany关系,它将一个或多个映射文档存储在父文档内的数组中。在 MongoDB 中,这将被表示为一个对象数组,这类似于您可以自己对collection字段执行的操作(存储关联数组的数组);但是,ODM 将利用 EmbedMany 映射将这些对象水合回文档实例。

于 2012-10-19T14:33:15.870 回答
7

您可以根据需要使用 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)
  }
于 2014-09-17T05:31:22.033 回答
4
...
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
...
class MyClass
{
    /**
     * @MongoDB\Hash
     */
    protected $tags = array();
}

此外,如果您想要一种可以帮助您处理该类型变量的表单类型,您可以查看BSPTagBundle 。

于 2013-09-26T09:03:28.027 回答