【问题标题】:Doctrine Mongo update $pull query not workingDoctrine Mongo 更新 $pull 查询不起作用
【发布时间】:2011-08-24 07:01:10
【问题描述】:

我正在尝试使用 $pull 更新查询删除对文档的引用(为了删除所述文档),但似乎没有发生任何事情。

我可以手动运行以下 Mongo 查询

db.collection.update({}, {
    $pull: {
        'field': {'$id': ObjectId("xxxxxxxx")}
    }
}, false, true)

效果很好。尝试在 Doctrine 的 ODM 中做同样的事情既不会产生预期的结果,也不会产生任何错误消息。这是我们目前所拥有的

$id = new MongoId("xxxxxxxx");

$qb = $repo->createQueryBuilder();
$qb->update();
$qb->field('field')->pull(array('$id' => $id));
$qb->getQuery()->execute();

关于我做错了什么的任何提示?

【问题讨论】:

    标签: php mongodb doctrine doctrine-odm


    【解决方案1】:

    啊,翻遍了Doctrine代码终于找到了……

    必须将multi 选项传递给MongoCollection::update()

    $qb->getQuery(array('multiple' => true))->execute();
    

    【讨论】:

    • 我猜你也可以使用 updateMany() 而不是 update()
    【解决方案2】:
     $friend = Zend_Registry::get('doctrine')->getDocumentManager()->createQueryBuilder('App\document\Message')->update()->field('unread')->set(TRUE)->field('viewer_id')->equals(10001)-> getQuery(array('multiple' => true))->execute();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多