使用Doctrine和MongoDB存储数组

use*_*256 5 doctrine mongodb symfony

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

我不想要参考文档,只有数组.

例:

Type[ 
     Type1,
     Type2,
     Type3
]
Run Code Online (Sandbox Code Playgroud)

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

jmi*_*ola 13

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

如果示例中的"Type"是映射文档类,那么您将需要使用EmbedMany关系,该关系将一个或多个映射文档存储在父文档中的数组中.在MongoDB中,这将表示为一个对象数组,类似于您可以自己使用该collection字段(存储关联数组的数组); 但是,ODM将利用EmbedMany映射将这些对象水化回文档实例.


Bha*_*raz 6

您可以根据需要使用mongo类型哈希或集合.

散列:将值存储并检索为关联数组.

集合:将值存储并检索为数字索引数组.

例如:

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;
}
Run Code Online (Sandbox Code Playgroud)

数据存储如下:

"tags": [
    "man",
    "boy",
    "male",
    "sandal",
    "cloth",
    "army boots",
    "boots",
    "sport shoes",
    "school",
    "casual",
    "office"
  ],

"country_wise_total_count": {
     "NP": NumberInt(7),
     "US" : NumberInt(10)
  }
Run Code Online (Sandbox Code Playgroud)