MongoDb Doctrine Symfony 2中的非规范化数据

monkeyUser

我正在关注这份文件

http://docs.doctrine-project.org/projects/doctrine-mongodb-odm/zh-CN/latest/tutorials/getting-started.html

http://symfony.com/doc/current/bundles/DoctrineMongoDBBundle/index.html

保存文档时,我有两个收藏夹

像这样:

   {
    "_id" : ObjectId("5458e370d16fb63f250041a7"),
    "name" : "A Foo Bar",
    "price" : 19.99,
    "posts" : [ 
        {
            "$ref" : "Embedd",
            "$id" : ObjectId("5458e370d16fb63f250041a8"),
            "$db" : "test_database"
        }
    ]
}

我想要

   {
    "_id" : ObjectId("5458e370d16fb63f250041a7"),
    "name" : "A Foo Bar",
    "price" : 19.99,
    "posts" : [ 
        {
           "mycomment" :"dsdsds"
           " date" : date
        }
    ]
}

我想对数据进行非规范化。我该怎么做?

我可以使用mongoDb的$ push,$ addToSet等方法吗?

谢谢

杰米科拉

Doctrine ODM支持引用嵌入式文档

在第一个示例中,您正在使用引用。主文档(假设它称为Product)引用了许多Post文档。这些Post文档位于它们自己的集合中(出于某种原因,它被命名为Embedd-如果保留此架构,我建议重命名)。默认情况下,ODM使用DBREF为引用约定。因此,每个引用是本身有一个小型的嵌入式文件$ref$id以及$db多个领域。

通过使用嵌入式文档(@EmbedMany您的情况下映射)可以实现非规范化如果要嵌入Post文档,则Post类应映射为@EmbeddedDocument这告诉ODM它不是一流的文档(属于其自己的收藏集),因此它不必担心通过_id类似方式跟踪它(实际上,嵌入式文档甚至不需要标识符,除非您想要地图一)。

我决定嵌入或引用的经验法则通常是问自己:“我需要在父文档上下文之外的文档吗?” 如果帖子在产品记录之外没有其他身份,我很乐意将其嵌入;但是,如果以后我发现我的应用程序还希望向用户显示其所有帖子的列表,或者我需要按帖子查询(例如,所有最新帖子的供稿,而与产品无关),那么我可能想参考帖子集合中的文档(或根据需要简单地复制嵌入的帖子)。

或者,您可以决定帖子应同时存在于它们自己的集合中嵌入到产品中。在这种情况下,您可以将AbstractPost类创建为,@MappedSuperclass并在那里定义公共字段。然后,使用Post和EmbeddedPost子类对此进行扩展(相应地进行映射)。您将负责创建一些代码以从Post文档中生成EmbeddedPost,该代码将适合嵌入Product.posts数组中。此外,您将需要处理顶级帖子和嵌入式帖子之间的数据同步(例如,如果某人编辑帖子评论,则可能还希望更新所有相应的嵌入式版本)。


关于引用的主题:ODM还支持simple引用映射选项,在这种情况下,它将仅存储引用文档的_id而不是较大的DBRef对象。在大多数情况下,让DBRef存储每个引用文档的集合和数据库名称是非常多余的。但是,如果您使用的是单集合继承则DBRef实际上很有用,因为ODM使用该对象存储额外的区分符信息(即,所引用对象的类)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

返回数组,不是Doctrine查询中的对象-Symfony2

来自分类Dev

Symfony中的Doctrine可上传扩展

来自分类Dev

Symfony 2 Doctrine ODM参考

来自分类Dev

Symfony2-如何在Doctrine MongoDB ODM中使用postLoad事件侦听器来更改文档?

来自分类Dev

Symfony2 + Doctrine2中的CakePHP模型行为?

来自分类Dev

使用Symfony2和Doctrine导入数据库

来自分类Dev

如何在Symfony 2服务容器中设置Doctrine MongoDB存储库

来自分类Dev

Symfony2-Doctrine2 QueryBuilder在ManyToMany字段中

来自分类Dev

Symfony2在Doctrine Fixtures中执行SQL文件

来自分类Dev

如何配置Monolog以使用Symfony2和Doctrine将日志存储到MongoDB中

来自分类Dev

Symfony / Doctrine在内存中未更新

来自分类Dev

在Symfony / Doctrine中过滤关联实体集合

来自分类Dev

实体中的Symfony / Doctrine关系COUNT

来自分类Dev

如何使用Doctrine在Symfony2中实现子查询?

来自分类Dev

Symfony2 / Doctrine回滚差异

来自分类Dev

Symfony2 Doctrine从CLI中的文件运行SQL

来自分类Dev

Symfony / Doctrine / MongoDB获取每第N个项目

来自分类Dev

Symfony 2:在ContainerAwareCommand中禁用Doctrine事件侦听器

来自分类Dev

Symfony + Doctrine功能数据库测试

来自分类Dev

如何在Symfony 2服务容器中设置Doctrine MongoDB存储库

来自分类Dev

Symfony2 / Doctrine联合查询

来自分类Dev

MongoDB非规范化“向下”而不是嵌入

来自分类Dev

Symfony2-Doctrine2 QueryBuilder在ManyToMany字段中

来自分类Dev

MongoDB-非规范化模式更新

来自分类Dev

避免延迟加载Doctrine Symfony2

来自分类Dev

如何在Symfony中实现Doctrine NotifyPropertyChanged

来自分类Dev

Symfony 学说数据库规范化

来自分类Dev

Symfony Doctrine 重置数据库

来自分类Dev

如何在 MongoDB 中规范化数据模型/JSON?

Related 相关文章

热门标签

归档