使用Doctrine和MongoDB存储阵列
如何使用Doctrine和Mongo DB存储阵列 我不想要参考文档,只想要数组 例如:使用Doctrine和MongoDB存储阵列,mongodb,symfony,doctrine,Mongodb,Symfony,Doctrine,如何使用Doctrine和Mongo DB存储阵列 我不想要参考文档,只想要数组 例如: Type[ Type1, Type2, Type3 ] 我是否需要创建新的Doctrine ODM数据类型 如果需要在数组中存储未映射到文档类的值,可以使用映射到MongoDB中基本数组的集合字段映射。还有一个hash类型,它类似地将PHP中的关联数组转换为MongoDB中的对象,而不映射其中的任何内容 如果示例中的“Type”是一个映射文档类,那么您需要使用一个关系,该关
Type[
Type1,
Type2,
Type3
]
我是否需要创建新的Doctrine ODM数据类型 如果需要在数组中存储未映射到文档类的值,可以使用映射到MongoDB中基本数组的
集合
字段映射。还有一个hash
类型,它类似地将PHP中的关联数组转换为MongoDB中的对象,而不映射其中的任何内容
如果示例中的“Type”是一个映射文档类,那么您需要使用一个关系,该关系将在父文档中的数组中存储一个或多个映射文档。在MongoDB中,这将被表示为一个对象数组,这类似于您可以自己使用集合
字段(存储一个关联数组)所做的事情;然而,ODM将利用EmbedMany映射将这些对象水合回文档实例
...
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
...
class MyClass
{
/**
* @MongoDB\Hash
*/
protected $tags = array();
}
此外,如果您想要一个表单类型来帮助您处理该类型的变量,您可以检查它。您可以根据需要使用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;
}
数据的存储方式如下:
"tags": [
"man",
"boy",
"male",
"sandal",
"cloth",
"army boots",
"boots",
"sport shoes",
"school",
"casual",
"office"
],
"country_wise_total_count": {
"NP": NumberInt(7),
"US" : NumberInt(10)
}
为我工作,谢谢。不清楚为什么文档中没有指定,我们应该使用什么样的映射来更新数组以添加另一个key:value元素?@Sekai:我不理解这个问题。
collection
类型在将PHP值写入MongoDB字段(以数字方式重新索引键)之前,通过array_values()
运行PHP值。hash
策略将PHP值强制转换为对象(即PHP中的stdClass),以确保将其保存为BSON对象。集合/散列值中的键/值对均未映射(这就是它们与嵌入文档(EmbedOne和EmbedMany)的区别所在)。我的意思是,如果你有一个像0=>'a',1=>'b'这样的数组,我想附加'c',所以数组看起来像symfony2中的0=>'a',1=>'b',2=>'c',我会手动在我的文档类中添加一个函数来完成它。我想知道如果你的模型中有一个方法将元素附加到数组中,是否有一个映射会自动生成这个函数字段,它被映射为集合
,行为应该是您所期望的。ODM不关心散列
和集合
的数组/对象值内的更改,所以它只是将$设置
文档中的新值。这与引用相反,并且嵌入了许多关系,而在此之前,它有更多的逻辑来更新单个数组/对象元素。