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

时间:2013-04-12 15:24:11

标签: mongodb doctrine-odm

字段标记是场景文档中的数组。我想在数组中用'Good'替换'Bad'元素:

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

但不行。

感谢。

2 个答案:

答案 0 :(得分:1)

没有一个替换功能,但您可以通过拉出所有'Bad'并在

中推送'Good'来在一个查询中执行此操作
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

答案 1 :(得分:0)

这已经很长时间了,但是如果没有一个好的答案就离开这篇文章我发现了一个可以帮助我们的链接(Mongodb array $push and $pull)。

  

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