我无法在Symfony2中找到如何使用Doctrine Mongo ODM更新嵌入式文档的方法。我有一个名为Page的类,其中包含许多嵌入式文档“ Comments”,并且我想使用createQueryBuilder来更新特定的注释。这是我有的一个简单的类:
课程页{
protected $id;
/** @MongoDB\EmbedMany */
private $pageComment = array();
}
我搜索了整个Internet,但没有找到有关如何使用Doctrine ODM查询生成器更新文档的子文档的任何信息。我将不胜感激,因为我是Doctrine和Mongo的新手。简而言之,我想在通过ID搜索后在页面中更新特定评论。
谢谢您的帮助!
如果您想使用queryBuilder,请使用此
$dm->createQueryBuilder('Page')
->update()
->field('page.pageComment')->set( <$newupdatePageCommentObj> )
->field('id')->equals('<matchedId>')
->getQuery()
->execute();
或当您为EmbedMany成员变量生成setter和getter时,它将在您的类内生成add和remove成员函数。因此,在您的情况下,这些将成为成员函数:
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 );
}
因此,您可以使用addPageComment()函数,如果不存在它将添加它,并将在已经存在的情况下对其进行更新。
$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();
您一次只能更新一个字段(而不是pageComment.$
:]
$this->createQueryBuilder('page')
->update()
->field('id')->equals($pageId)
->field('pageComment.id')->equals($pageCommentId)
->field("pageComment.$.field1")->set($field1)
->getQuery()
->execute();