0

我找不到如何在 Symfony2 中使用 Doctrine Mongo ODM 更新嵌入式文档。我有一个名为 Page 的类,其中包含许多嵌入式文档“评论”,我想使用 createQueryBuilder 来更新特定评论。这是我拥有的一个简单的类:

类页面{

protected $id;

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

}

我搜索了整个互联网,但没有找到任何有关如何使用 Doctrine ODM 查询生成器更新文档子文档的信息。我会感谢任何信息,因为我是 Doctrine 和 Mongo 的新手。简而言之,我想在通过 id 搜索页面后更新页面中的特定评论。

在此先感谢您的帮助!

4

3 回答 3

0

如果你想使用 queryBuilder 使用这个

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

或者当您为 EmbedMany 成员变量生成 setter 和 getter 时,它将在您的类中生成添加和删除成员函数。所以在你的情况下,这些将是成员函数:

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() 函数,如果它不存在,它将添加它,并将更新它是否已经存在。

于 2013-04-24T10:45:32.860 回答
0

您一次只能更新一个字段(而不是pageComment.$):

$this->createQueryBuilder('page')
    ->update()
    ->field('id')->equals($pageId)
    ->field('pageComment.id')->equals($pageCommentId)
    ->field("pageComment.$.field1")->set($field1)
    ->getQuery()
    ->execute();
于 2020-03-02T10:23:43.343 回答
-1
 $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();
于 2013-05-23T15:26:31.983 回答