Toidicode.com

Toidicode.com

BASIC TO ADVANCE

Bài 5: Insert dữ liệu vào trong MongoDB bằng PHP

Ở bài trước mình đã giới thiệu với mọi người cách truy xuất đến các collection trong MongoDB rồi. Sau khi đã truy xuất được đến các collection rồi thì bài này chúng ta sẽ thực hiện thêm dữ liệu vào trong các collection.

1, Thêm một bản ghi.

Để có thể thêm một bản ghi vào trong MongoDB thì các bạn thực hiện phương thức insertOne() với cú pháp như sau:

$collection->insertOne(data, options);

Trong đó:

  • $collection là obection chứa collection mà bạn đã trỏ tới.
  • data là mảng dữ liệu mà bạn muốn thêm vào trong collection.
  • option là mảng chứa các thông số cấu hình như: writeconcern, bypassDocumentValidation.

VD:  Mình sẽ thực hiện thêm một bản ghi vào trong collection Post.

<?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;

//insert
$insertResult = $post->insertOne([
    'title'    => 'Second Post',
    'content'  => 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Odio harum necessitatibus eius magnam, doloribus explicabo omnis natus alias, nisi dolorum ea ab. Nobis quo magnam aliquid molestias, ipsum nihil eum.',
    'category' => 'Foo',
]);

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

Và MongoDB sẽ trả về Write Result Classes có các thông số như sau nếu dữ liệu được thêm thành công. Còn ngược lại nếu như không thành công thì nó sẽ trả về một error exception.

object(MongoDB\InsertOneResult)#15 (3) {
  ["writeResult":"MongoDB\InsertOneResult":private]=>
  object(MongoDB\Driver\WriteResult)#14 (9) {
    ["nInserted"]=>
    int(1)
    ["nMatched"]=>
    int(0)
    ["nModified"]=>
    int(0)
    ["nRemoved"]=>
    int(0)
    ["nUpserted"]=>
    int(0)
    ["upsertedIds"]=>
    array(0) {
    }
    ["writeErrors"]=>
    array(0) {
    }
    ["writeConcernError"]=>
    NULL
    ["writeConcern"]=>
    object(MongoDB\Driver\WriteConcern)#12 (0) {
    }
  }
  ["insertedId":"MongoDB\InsertOneResult":private]=>
  object(MongoDB\BSON\ObjectId)#13 (1) {
    ["oid"]=>
    string(24) "5a2b4d166e14730a780023f3"
  }
  ["isAcknowledged":"MongoDB\InsertOneResult":private]=>
  bool(true)
}

2, Thêm nhiều bản ghi.

Để có thể thêm được nhiều dữ liệu một lúc thì lúc này chúng ta cần phải sử dụng phương thức insertMany() với cú pháp tương tự như đối với phương thức insertOne().

VD: Mình sẽ thực hiện thêm 2 bản ghi vào trong mongoDB sử dụng phương thức insertMany().

<?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;

//insert
$insertResult = $post->insertMany([
    [
        'title'    => 'Foo Post',
        'content'  => 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Odio harum necessitatibus eius magnam, doloribus explicabo omnis natus alias, nisi dolorum ea ab. Nobis quo magnam aliquid molestias, ipsum nihil eum.',
        'category' => 'Foo',
    ],
    [
        'title'    => 'Bar Post',
        'content'  => 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Odio harum necessitatibus eius magnam, doloribus explicabo omnis natus alias, nisi dolorum ea ab. Nobis quo magnam aliquid molestias, ipsum nihil eum.',
        'category' => 'Bar'],
]);

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

Và cũng tương tự như đối với phương thức insertOne() thì phương thức insertMany() cũng trả về Write Result Classes nếu thành công và ngược lại nếu có lỗi xảy ra thì nó sẽ raise exception.


object(MongoDB\InsertManyResult)#16 (3) {
  ["writeResult":"MongoDB\InsertManyResult":private]=>
  object(MongoDB\Driver\WriteResult)#15 (9) {
    ["nInserted"]=>
    int(2)
    ["nMatched"]=>
    int(0)
    ["nModified"]=>
    int(0)
    ["nRemoved"]=>
    int(0)
    ["nUpserted"]=>
    int(0)
    ["upsertedIds"]=>
    array(0) {
    }
    ["writeErrors"]=>
    array(0) {
    }
    ["writeConcernError"]=>
    NULL
    ["writeConcern"]=>
    object(MongoDB\Driver\WriteConcern)#12 (0) {
    }
  }
  ["insertedIds":"MongoDB\InsertManyResult":private]=>
  array(2) {
    [0]=>
    object(MongoDB\BSON\ObjectId)#13 (1) {
      ["oid"]=>
      string(24) "5a2b4f536e14730a780023f7"
    }
    [1]=>
    object(MongoDB\BSON\ObjectId)#14 (1) {
      ["oid"]=>
      string(24) "5a2b4f536e14730a780023f8"
    }
  }
  ["isAcknowledged":"MongoDB\InsertManyResult":private]=>
  bool(true)
}

3, Lời kết.

Phần trên mình có nói đến Write Result Classes, các bạn tạm thời cứ biết nó trả về một object đã còn truy vấn đến object đó như thế nào mình sẽ giải thích vào một bài khác.

Đăng ký nhận tin.

Chúng tôi chỉ gửi tối đa 2 lần trên 1 tháng. Tuyên bố không spam mail!

Vũ Thanh Tài

About author
The best way to learn is to share
Xem tất cả bài đăng

2 Comments

làm sao để comment khi không có account nhỉ :D

Nguyên

6 năm trước

giả sử em có 1 triệu bản ghi muốn insert vào mongodb, nhưng nếu trong quá trình insert đó có lỗi vì một lý do bất kỳ nào đó thì em muốn quá trình insert được dừng lại và khôi phụ lại dữ liệu trước khi insert thì phải làm sao ah!
thanks admin!

mai duy lân

4 năm trước

Bình luận

Captcha