【问题标题】:PHP MongoDB update multiple fields with one queryPHP MongoDB 一次查询更新多个字段
【发布时间】:2011-10-11 06:41:38
【问题描述】:

我已尝试运行此查询:

$collection->update(
    array('_id' => 'mongoIDhere'),
    array(
        '$set' => array("parent" => 'data'),
        array("parents" => 'data')
    ),
    array("upsert" => true)
);

但它只会更新第二个“set”参数(即 array("parents" => 'data') )。当在两个单独的查询中完成时,这些都可以正常工作,但在一起就不行 - 什么给出了?!

【问题讨论】:

    标签: php mongodb mongodb-php


    【解决方案1】:
    $collection->update(
        array('_id' => 'mongoIDhere'),
        array(
            '$set' => array("parent" => 'data'),
        ),
        array("upsert" => true)
    );
    

    记住 MongoDB 只接受 key->value 对格式的数组,即 array("parents" => 'data') 应该是 $something => array("parents" => 'data') 或者在您的 php.ini 文件中进行更改,以便允许空值作为键。

    【讨论】:

      【解决方案2】:

      尝试使用多个选项

      $collection->update(
          array('_id' => 'mongoIDhere'),
          array('$set' => array("parent" => 'data')),
          array("upsert" => true, "multiple" => true)
      );
      

      “多个”选项

      所有匹配 $criteria 的文档都将被更新。 MongoCollection::update() 的行为与 MongoCollection::remove() 完全相反:它默认更新一个文档,而不是所有匹配的文档。建议您始终指定是要更新多个文档还是单个文档,因为数据库可能会在将来的某个时候更改其默认行为。

      Mongocollection in PHP Doc's

      【讨论】:

        【解决方案3】:

        试试这样的。

        $collection->update(
                    array('_id' => 'mongoIDhere'),
                    array(
                        '$set' => 
                                  array(
                                         array("parent" => 'data'),
                                         array("parents" => 'data')
                                       )
                    ),
                    array("upsert" => true) 
                 );
        

        希望这会奏效..

        【讨论】:

          【解决方案4】:

          假设您使用的是https://github.com/mongodb/mongo-php-library,您应该试试这个:

          $collection->update(
            ['_id' => 'mongoIDhere],
            ['$set' => ['parent' => 'data', 'parent2' => 'data2']],
            ['upsert' => true]
          );
          

          我希望您在提出问题后找到了解决问题的方法。但是我今天遇到了同样的问题,并且无法通过搜索引擎找到任何答案,所以我认为这可能会对其他人有所帮助。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-07-18
            • 2016-04-19
            • 2022-06-10
            • 1970-01-01
            • 2019-08-21
            • 2011-09-24
            相关资源
            最近更新 更多