美文网首页
PHP MongoDB 更新文档 --- 2022-04-02

PHP MongoDB 更新文档 --- 2022-04-02

作者: 一位先生_ | 来源:发表于2022-05-10 09:59 被阅读0次

    本章介绍PHP MongoDB的文档更新操作。

    前置教程

    更新一个文档

    <?php
    // 使用默认地址连接MongoDB,并引用test数据库中的users集合
    $collection = (new MongoDB\Client)->test->users;
    $collection->drop(); // 删除集合
    
    // 下面插入2条测试数据
    $collection->insertOne(['name' => 'Bob', 'state' => 'ny']);
    $collection->insertOne(['name' => 'Alice', 'state' => 'ny']);
    
    // 更新一个匹配条件的文档
    $updateResult = $collection->updateOne(
        ['state' => 'ny'], // 查询条件
        // 通过$set操作符,设置需要更新的字段内容
        ['$set' => ['country' => 'us']] // 将country值改为us
    );
    
    // 打印匹配数量
    printf("Matched %d document(s)\n", $updateResult->getMatchedCount());
    // 打印修改数量
    printf("Modified %d document(s)\n", $updateResult->getModifiedCount());
    
    

    批量更新文档

    <?php
    // 使用默认地址连接MongoDB,并引用test数据库中的users集合
    $collection = (new MongoDB\Client)->test->users;
    $collection->drop();
    
    // 下面插入3个文档数据
    $collection->insertOne(['name' => 'Bob', 'state' => 'ny', 'country' => 'us']);
    $collection->insertOne(['name' => 'Alice', 'state' => 'ny']);
    $collection->insertOne(['name' => 'Sam', 'state' => 'ny']);
    // 根据条件更新多个文档内容
    $updateResult = $collection->updateMany(
        ['state' => 'ny'], // 设置查询条件 state = ny
        ['$set' => ['country' => 'us']] // 将country值改为us
    );
    
    

    updateMany函数的功能跟updateOne类似,区别是updateMany支持匹配修改数据。

    替换文档

    上面的例子都是局部更新文档的字段内容,但是有时候我们想替换整个文档内容。

    <?php
    // 使用默认地址连接MongoDB,并引用test数据库中的users集合
    $collection = (new MongoDB\Client)->test->users;
    $collection->drop();
    
    // 插入测试数据
    $collection->insertOne(['name' => 'Bob', 'state' => 'ny']);
    
    // 根据查询条件,匹配一个文档内容
    $updateResult = $collection->replaceOne(
        ['name' => 'Bob'], // 设置查询条件 name = 'Bob'
        ['name' => 'Robert', 'state' => 'ca'] // 替换成当前内容
    );
    
    

    执行replaceOne函数后,会将匹配到的一个文档,整个替换成replaceOne第二个参数指定的文档数据。

    提示:MongoDB的文档ID是不能被替换的,这是个特例。

    upsert

    upsert参数的作用是在执行更新操作的时候,如果要更新的文档不存在,则插入一个新的文档。

    <?php
    
    $collection = (new MongoDB\Client)->test->users;
    $collection->drop();
    
    // 更新文档
    $updateResult = $collection->updateOne(
        ['name' => 'Bob'], // 设置查询条件
        ['$set' => ['state' => 'ny']], // 更新内容
        // 设置可选参数upsert = true
        ['upsert' => true] // 代表如果条件name=Bob,匹配不到文档,那么将更新内容和条件插入到一个新的文档。
    );
    
    // 查询新插入的文档数据
    $upsertedDocument = $collection->findOne([
        '_id' => $updateResult->getUpsertedId(),
    ]);
    
    // 打印结果
    var_dump($upsertedDocument);
    
    

    输出

    object(MongoDB\Model\BSONDocument)#16 (1) {
      ["storage":"ArrayObject":private]=>
      array(3) {
        ["_id"]=>
        object(MongoDB\BSON\ObjectId)#15 (1) {
          ["oid"]=>
          string(24) "57509c4406d7241dad86e7c3"
        }
        ["name"]=>
        string(3) "Bob"
        ["state"]=>
        string(2) "ny"
      }
    }
    

    相关文章

      网友评论

          本文标题:PHP MongoDB 更新文档 --- 2022-04-02

          本文链接:https://www.haomeiwen.com/subject/wkvxsrtx.html