1

字段标签是场景文档中的数组。我想将数组中的元素 '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();

但不工作。

谢谢。

4

2 回答 2

2

已经很长时间了,但是为了不离开这篇文章而没有一个好的答案,我找到了一个可以帮助我们的链接( Mongodb 数组 $push 和 $pull )。

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

于 2017-03-31T13:31:53.723 回答
1

没有一个单独的替换功能,但是您可以通过将所有“坏”拉出并推入“好”来在一个查询中完成

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();

请参阅此处的教义文档:http: //docs.doctrine-project.org/projects/doctrine-mongodb-odm/en/latest/reference/query-builder-api.html

于 2013-04-12T15:38:29.050 回答