【问题标题】:How to replace an element in an array field in mongodb如何在mongodb中替换数组字段中的元素
【发布时间】:2017-03-31 21:31:53
【问题描述】:

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

但不起作用。

谢谢。

【问题讨论】:

标签: mongodb doctrine-odm


【解决方案1】:

已经很长时间了,但是为了在没有好的答案的情况下不要离开这篇文章,我找到了一个可以帮助我们的链接 (Mongodb array $push and $pull)。

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

【讨论】:

    【解决方案2】:

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

    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

    【讨论】:

    • 不,这不起作用。我一开始写了这个,mongod抱怨:code(修饰符不允许字段名重复)
    • 嗯,大概三个。需要先找到要修改的文档
    • 在mongo中不需要做两次。但是,我不熟悉 Doctrine 给你一个答案。尝试一些选项并在此处发布答案。
    • 这不适合我...errmsg: 'exception: Cannot update \'tags\' and \'tags\' at the same time
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 1970-01-01
    • 2021-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多