DANH MỤC: PHP&MONGODB

Bài 6: Update trong MongoDB bằng PHP


Bài trước mình đã giới thiệu với mọi người cách thêm dữ liệu trong MongoDB bằng PHP rồi, bài này mình sẽ thực hiện sửa dữ liệu trong MongoDB bằng PHP.

1, Sửa một bản ghi.

Để sửa một bản ghi trong MongoDB các bạn sử dụng phương thức updateOne() với cú pháp như sau:

$collection->updateOne(filter, update, options);

Trong đó:

  • filter là mảng dữ liệu mà bạn muốn so khớp, lọc.
  • update là mảng dữ liệu mà bạn muốn thay thế cho dữ liệu được filter.
  • options là mảng chứa các thông số tùy chỉnh thêm.

Chú ý: Nếu như điều kiện filter trả về nhiều hơn một bản ghi thì dữ liệu chỉ được thay thế cho bản ghi đầu tiên.

VD: Mình sẽ thực hiện update lại thông tin cho Post có _id5a2b4f536e14730a780023f8.

<?php
use MongoDB\Client;

require_once "vendor/autoload.php";

// khoi tao class Client
$conn = new Client("mongodb://127.0.0.1:27017");

//select database
$db = $conn->tuts;

//selection collection
$post = $db->Post;

//update
$updatedResult = $post->updateOne(
    ['_id' => new MongoDB\BSON\ObjectId('5a2b4f536e14730a780023f8')],
    ['$set' => [
            'title'    => 'NewS Title',
            'content'  => 'new conten',
            'category' => 'Foo New',
        ],
    ]
);

//dump
var_dump($updatedResult);
die();

Phương thức update sẽ trả về đối tượng Update Result nếu thành công và sẽ trả về một error exception nếu thất bại.

object(MongoDB\UpdateResult)#16 (2) {
  ["writeResult":"MongoDB\UpdateResult":private]=>
  object(MongoDB\Driver\WriteResult)#15 (9) {
    ["nInserted"]=>
    int(0)
    ["nMatched"]=>
    int(1)
    ["nModified"]=>
    int(1)
    ["nRemoved"]=>
    int(0)
    ["nUpserted"]=>
    int(0)
    ["upsertedIds"]=>
    array(0) {
    }
    ["writeErrors"]=>
    array(0) {
    }
    ["writeConcernError"]=>
    NULL
    ["writeConcern"]=>
    object(MongoDB\Driver\WriteConcern)#14 (0) {
    }
  }
  ["isAcknowledged":"MongoDB\UpdateResult":private]=>
  bool(true)
}

2, Sửa nhiều bản ghi.

Tương tự như insert , đối với update. Khi bạn muốn update nhiều bản ghi thì bạn sẽ phải sử dụng phương thưc updateMany() với cú pháp tương tự như đối với updateOne().

VD: Mình sẽ sửa tất cả các Post có category Foo thành Bar.

<?php
use MongoDB\Client;

require_once "vendor/autoload.php";

// khoi tao class Client
$conn = new Client("mongodb://127.0.0.1:27017");

//select database
$db = $conn->tuts;

//selection collection
$post = $db->Post;

//update
$updatedResult = $post->updateMany(
    ['category' => 'Foo New'],
    ['$set' => [
            'category' => 'Bar',
        ],
    ]
);

//dump
var_dump($updatedResult);
die();

Và đây là kết quả mình nhận được khi dump.

object(MongoDB\UpdateResult)#15 (2) {
  ["writeResult":"MongoDB\UpdateResult":private]=>
  object(MongoDB\Driver\WriteResult)#14 (9) {
    ["nInserted"]=>
    int(0)
    ["nMatched"]=>
    int(3)
    ["nModified"]=>
    int(3)
    ["nRemoved"]=>
    int(0)
    ["nUpserted"]=>
    int(0)
    ["upsertedIds"]=>
    array(0) {
    }
    ["writeErrors"]=>
    array(0) {
    }
    ["writeConcernError"]=>
    NULL
    ["writeConcern"]=>
    object(MongoDB\Driver\WriteConcern)#13 (0) {
    }
  }
  ["isAcknowledged":"MongoDB\UpdateResult":private]=>
  bool(true)
}

3, Lời kết.

Phần này mình chỉ giới thiệu với mọi người cách update data trong MongoDB thôi, còn phần xử lý các dữ liệu trả về mình sẽ trình bày với mọi người vào một bài khác.

Nguồn: Toidicode.com

Thông tin tác giả

Vũ Thanh Tài

Vũ Thanh Tài

Biển học vô biên, quay đầu là dại!

Hãy tham gia group facebook để cùng giao lưu chia sẻ kiến thức! Tham Gia