如何在mongodb中替换数组字段中的元素

如何在mongodb中替换数组字段中的元素,mongodb,doctrine-odm,Mongodb,Doctrine Odm,字段标记是场景文档中的数组。我想将数组中的元素“Bad”替换为“Good”,如下所示: db.scenes.update({ 'tags': 'Bad' }, { $set: { 'tags.$' : 'Good' } }, { 'multi':true}); 我不知道在教义中怎么做。我试过了 $dm->createQueryBuilder('SceneBundle:Scene') ->update() ->field('tags.$'

字段标记是场景文档中的数组。我想将数组中的元素“Bad”替换为“Good”,如下所示:

db.scenes.update({ 'tags': 'Bad' }, { $set: { 'tags.$' : 'Good' } }, { 'multi':true});
我不知道在教义中怎么做。我试过了

    $dm->createQueryBuilder('SceneBundle:Scene')
        ->update()
        ->field('tags.$')->set($tag)
        ->field('tags')->equals($oldTag)
        ->multiple(true)
        ->getQuery()
        ->execute();
但不是工作


谢谢。

这个函数没有一个替换函数,但是你可以在一个查询中完成它,方法是将所有的“坏”拉出,然后将“好”推入

db.scenes.update({ 'tags': 'Bad' }, { $pull: { 'tags' : 'Bad' }, $push: { 'tags' : 'Good' } }, { 'multi':true});
等效原则应为:

 $dm->createQueryBuilder('SceneBundle:Scene')
    ->update()
    ->field('tags')->pull('Bad')
    ->field('tags')->push('Good')
    ->field('tags')->equals('Bad')
    ->multiple(true)
    ->getQuery()
    ->execute();

请参阅这里的条令文档:

已经很久了,但为了不在没有好答案的情况下离开这篇文章,我找到了一个可以帮助我们的链接()

问题是MongoDB不允许在服务器上执行多个操作 同一更新调用中的相同属性。这意味着 操作必须在两个单独的原子操作中发生


不,这不起作用。刚开始我写了这篇文章,mongod抱怨说:
code
(字段名不允许使用修饰符重复)嗯,可能是三个。需要先找到要修改的文档在mongo中不需要做两次。然而,我不能流利地回答你的问题。尝试一些选项并在这里发布答案。这对我来说不合适
errmsg:'例外:不能同时更新'tags\'和'tags\'。
我不知道什么是原则,但这里有一些建议。