DANH MỤC: NODE.JS & MONGODB

Bài 5: Select data trong MongoDB bằng Node.js


Ở phần trước chúng ta đã được tìm hiểu về ba cách insert data vào MongoDB bằng Node.js rồi. Và ở phần này mình sẽ giới thiệu với mọi người hai cách select data trong MongoDB bằng Node.js.

1, Lấy ra một bản ghi duy nhất trong MongoDB.

-Để có thể lấy ra được bản một bản ghi duy nhất trong MongoDB thì mọi người có thể sử dụng phương thức findOne() với cú pháp như sau:

db.collection(collectionName).findOne(query, options, callback);

Trong đó:

  • collectionName là tên của collection mà bạn muốn sử dụng để lấy ra dữ liệu.
  • query là object chứa điều kiện cho dữ liệu được lấy ra (xem danh sách các điều kiện).
  • options là object chứa các thông số tùy chọn thêm (xem các param). Tham số này có thể bỏ trống.
  • callback có thể là tên hàm hoặc một hàm ẩn danh (closure function) có tác dụng thực thi các hành động khi phương thức findOne() run.

VD: Lấy ra một bản ghi trong collection products (đã tạo ở các phần trước)

const mongoClient = require('mongodb').MongoClient;
mongoClient.connect('mongodb://127.0.0.1:27017/nodedb', function(err, db) {
    if (err) throw err;
    var products = db.collection('products');
    products.findOne({}, function (err,res) {
        //nếu có lỗi
        if (err) throw err;
        //nếu thành công
        console.log(res);
    });
    db.close();
});

Kết quả trả về:

{
    _id: 596f29d8a37e13178c0d4df3,
    name: 'ao thun',
    price: 50000,
    category: 'quan ao'
}

-Câu lệnh trên có thể nhận xét tương ứng với câu lệnh sau đây ở trong SQL:

SELECT * FROM products limit 0,1

2, Lấy ra nhiều bản ghi trong MongoDB.

-Nếu như bạn muốn lấy ra nhiều bản ghi trong MongoDB thì bạn có thể sử dụng phương thức find() với cú pháp như sau:

db.collection(collectionName).find(query).[anyThing].toArray(callback);

Trong đó:

  • collectionName là tên của collection mà bạn muốn sử dụng để lấy ra dữ liệu.
  • query là object chứa điều kiện cho dữ liệu được lấy ra (xem danh sách các điều kiện).
  • anyThing là các phương thức xử lý trước khi trả về kết quả (Các bài sau mình sẽ giới thiệu). Tham số này có thể bỏ trống.
  • callback có thể là tên hàm hoặc một hàm ẩn danh (closure function) có tác dụng thực thi các hành động khi phương thức find() run.

VD: Lấy ra tất cả dữ liệu đang có trong collection products.

const mongoClient = require('mongodb').MongoClient;
mongoClient.connect('mongodb://127.0.0.1:27017/nodedb', function(err, db) {
    if (err) throw err;
    var products = db.collection('products');
    products.find({}).toArray(function (err,data) {
        //nếu lỗi
        if (err) throw err;
        //nếu thành công
        console.log(data);
    });
    db.close();
});

Kết quả trả về:

[{
        _id: 596 f29d8a37e13178c0d4df3,
        name: 'ao thun',
        price: 50000,
        category: 'quan ao'
    },
    {
        _id: 596 f2a19a18275160c280482,
        name: 'ao phong',
        price: 75000,
        category: 'quan ao'
    },
    {
        _id: 596 f2a19a18275160c280483,
        name: 'giay the thao',
        price: 75000,
        category: 'giay dep'
    },
    {
        _id: 596 f2a19a18275160c280484,
        name: 'kinh',
        price: 375000,
        category: 'Thoi trang'
    },
    {
        _id: 596 f2ab312dd2b14a4a8389a,
        name: 'ao phong',
        price: 75000,
        category: 'quan ao'
    },
    {
        _id: 596 f2ab312dd2b14a4a8389b,
        name: 'giay the thao',
        price: 75000,
        category: 'giay dep'
    },
    {
        _id: 596 f2ab312dd2b14a4a8389c,
        name: 'kinh',
        price: 375000,
        category: 'Thoi trang'
    },
    {
        _id: 596 f2ac608bdd406d0ac723d,
        name: 'ao phong',
        price: 75000,
        category: 'quan ao'
    },
    {
        _id: 596 f2ac608bdd406d0ac723e,
        name: 'giay the thao',
        price: 75000,
        category: 'giay dep'
    },
    {
        _id: 596 f2ac608bdd406d0ac723f,
        name: 'kinh',
        price: 375000,
        category: 'Thoi trang'
    },
    {
        _id: 596 f2be6ef68f80ad40d55d1,
        name: 'ao thun',
        price: 50000,
        category: 'quan ao'
    },
    {
        _id: 596 f2c4536c1f5170c9e6391,
        name: 'ao thun',
        price: 50000,
        category: 'quan ao'
    },
    {
        _id: 596 f2c5c5e09d414c09f1c7b,
        name: 'ao thun',
        price: 50000,
        category: 'quan ao'
    }
]

Câu lệnh này tương ứng như câu lệnh sau trong SQL:

SELECT * FROM products

2, Dữ liệu trả về (Result).

-Như các bạn đã thấy dữ liệu trả về ở các phương thức trên nó đều là các object (đối với findOne)  hoặc mảng object (đối với find) nên chúng ta có thể dùng các cú pháp của object, array để lấy ra dữ liệu mà câu truy vấn trả về.

VD: Lấy tất cả dữ liệu đang có trong collection products và hiển thị dưới dạng table.

const http = require('http'),
mongoClient = require('mongodb').MongoClient;

http.createServer(function (req,res) {

    mongoClient.connect('mongodb://127.0.0.1:27017/nodedb', function(err, db) {
        if (err) throw err;
        var products = db.collection('products');
        products.find({}).toArray(function (err,results) {
            if (err) throw err;
            data = '<table border="1" style="border-collapse:collapse" cellspacing="5" cellpadding="15">';
            data += '<tr><th>Name</th><th>Price</th><th>Category</th></tr>';
            results.forEach(function (row) {
                data += '<tr>';
                data += '<td>' + row.name + '</td>';
                data += '<td>' + row.price + '</td>';
                data += '<td>' + row.category + '</td>';
                data += '</tr>';
            });
            data += '</table>';
            res.writeHead(200, {'Content-Type': 'text/html'});
            res.end(data);
        })
        db.close();
    });

}).listen(8000);

Kết quả trả về:

Data mongoDB

3, Lời kết.

-Như vậy, phần này mình đã giới thiệu xong đến mọi người cách lấy ra dữ liệu trong mongodb rồi. Tuy nhiên, trong module này nó vẫn còn hỗ trợ chúng ta một số các phương thức lấy ra dữ liệu và xử lý thêm hành động khác như: findAndmodify, findAndRemove, findOneAndDelete, .. bạn nào cần có thể tham khảo thêm tại đây.

Nguồn: Toidicode.com

Thông tin tác giả

Thanh Tai (thanhtaivtt)

Thanh Tai (thanhtaivtt)

The best way to learn is to teach

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