如何使用Doctrine ODM将文档存储在另一个文档中?

问题描述:

如何使用Doctrine ODM将文档存储在另一个文档中?如何使用Doctrine ODM将文档存储在另一个文档中?

我在文档中看不到数组或Json类型。

我希望能够做这样的事情:

class Post { 

    /** 
    * @MongoDB\String 
    */ 
    protected $body; 

    /** 
    * @MongoDB\Array 
    */ 
    protected $comments = array(); 

} 

我不希望有征求意见的独立集合。我希望他们保存在每个帖子里面。

/** 
* @MongoDB\Document 
*/ 
class Post 
{ 
    /** 
    * @MongoDB\Id 
    */ 
    private $id; 

    /** 
    * @MongoDB\String 
    */ 
    private $body; 

    /** 
    * @MongoDB\EmbedMany(targetDocument="Comment") 
    */ 
    private $comments; 

    public function __construct() 
    { 
     $this->comments = new ArrayCollection(); 
    } 
} 

/** 
* @MongoDB\EmbeddedDocument 
*/ 
class Comment 
{ 
    /** 
    * @MongoDB\String 
    */ 
    private $body; 
} 

但请注意,评论,则不适合嵌入 - 相反,MongoDB中埋件的可能是最流行的例子。我从嵌入的意见开始,但后来遇到了一些问题,并决定将它们存储在单独的集合中。我不记得所有的问题,但主要的问题是无法对数据库端的评论进行排序。快速解决方案是在客户端对它们进行分类,但是当涉及到分页时,它不能进行扩展。

+0

我曾问尝试过这一点,但它说的ArrayCollection()无效或东西。列举检查 – HappyDeveloper

+0

Class Doctrine \ Common \ Collections \ ArrayCollection不是有效的文档或映射的超类。 – HappyDeveloper

+0

您是否尝试清除缓存? MongoDBBundle有一些缓存问题,所以即使在开发环境中,有时候也需要清除它。 –

在我的__construct()我需要

new \Doctrine\Common\Collections\ArrayCollection(); 

,你只需要

new ArrayCollection();