How to update embedded document in MongoDB with Doctrine ODM

孤街浪徒 提交于 2019-12-08 12:22:32

问题


I'm unable to find how to update embedded documents with Doctrine Mongo ODM in Symfony2. I have a class called Page with many embedded documents "Comments" and I want to use createQueryBuilder to update specific comment. Here is a simple class that I have:

class Page {

protected $id;

/** @MongoDB\EmbedMany */
private $pageComment = array();

}

I searched the whole internet, but I don't see to find any info on how to update subdocuments of a document with Doctrine ODM query builder. I will be thankful for any information as I'm new to both Doctrine and Mongo. In simple words I want to update specific comment in a page after searching for it by id.

Thanks in advance for your help!


回答1:


If you wan to use queryBuilder use this

$dm->createQueryBuilder('Page')
    ->update()
    ->field('page.pageComment')->set( <$newupdatePageCommentObj> )
    ->field('id')->equals('<matchedId>')
    ->getQuery()
    ->execute();

Or When you generate setters and getters for a EmbedMany member variable it will generate add and remove member functions inside your class. so in your case these will be member functions:

public function addPageComment(type_hint_with_your_pageComment_document $pageComment )
{
    $this->pageComment[] = $pageComment;
}
public function removePageComment( type_hint_with_your_pageComment_document $pageComment )
{
    $this->items->removeElement( $pageComment );
}

So you can use addPageComment() function which will add it if does not exists and will update it will its already there.




回答2:


 $yourArrayPageComment = array(
  "id" => new \MongoId($pageCommentId),
  "field1" => $field1,
  ...
)

 $this->createQueryBuilder('page')
            ->update()
            ->field('id')->equals($pageId)
            ->field('pageComment.id')->equals($pageCommentId)
            ->field("pageComment.$")->set($yourArrayPageComment)
            ->getQuery()
            ->execute();


来源:https://stackoverflow.com/questions/15950080/how-to-update-embedded-document-in-mongodb-with-doctrine-odm

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!