DANH MỤC: NODE.JS & MONGODB

Bài 6: Sắp xếp và giới hạn dữ liệu được lấy ra trong MongoDB trên Node.js


Tiếp tục với series, sau khi các bạn đã biết cách sử dụng phương thức find() để query lấy ra dữ liệu trong MongoDB rồi, thì bài này mình sẽ giới thiệu với các bạn cách sắp xếp (sort) và giới hạn (limit) dữ liệu trong MongoDB.

1, Sắp xếp dữ liệu trong MongoDB.

-Để sắp xếp dữ liệu được lấy ra trong MongoDB thì các bạn sử dụng phương thức sort()  với cú pháp sau:

.sort({field: mode});

Trong đó:

  • field là tên trường mà bạn muốn chọn sắp xếp dữ liệu.
  • mode là kiểu sắp xếp dữ liệu.
    • mode = 1 sắp xếp tăng dần.
    • mode = -1 sắp xếp giảm dần.

VD: Lấy ra tất cả các bản ghi đang có trong collection products và sắp xếp chúng theo giá tăng dần.

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({}).sort({price: 1}).toArray(function (err,data) {
        if (err) throw err;
        console.log(data);
    });
    db.close();
});

Kết quả trả về:

[{
        _id: 596 f29d8a37e13178c0d4df3,
        name: 'ao thun',
        price: 50000,
        category: 'quan ao'
    },
    {
        _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'
    },
    {
        _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 f2ab312dd2b14a4a8389a,
        name: 'ao phong',
        price: 75000,
        category: 'quan ao'
    },
    {
        _id: 596 f2ab312dd2b14a4a8389b,
        name: 'giay the thao',
        price: 75000,
        category: 'giay dep'
    },
    {
        _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 f2a19a18275160c280484,
        name: 'kinh',
        price: 375000,
        category: 'Thoi trang'
    },
    {
        _id: 596 f2ab312dd2b14a4a8389c,
        name: 'kinh',
        price: 375000,
        category: 'Thoi trang'
    },
    {
        _id: 596 f2ac608bdd406d0ac723f,
        name: 'kinh',
        price: 375000,
        category: 'Thoi trang'
    }
]

-Cú pháp trên tương ứng với query sau trong SQL:

SELECT * FROM products ORDER BY price ASC

2, Giới hạn dữ liệu được lấy ra trong MongoDB.

-Để giới hạn số lượng bản ghi được lấy ra trong MongoDB thì các bạn sử dụng phương thức limit() với cú pháp sau:

.limit(number)

Trong đó: number là số lượng bản ghi tối đa được lấy ra.

VD: Lấy ra tối đa 5 bản ghi đ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({}).limit(5).toArray(function (err,data) {
        if (err) throw err;
        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'
    }
]

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

SELECT * FROM products LIMIT 5

3, Skip dữ liệu trong MongoDB bằn Node.js.

-Để có thể loại bỏ một số bản ghi đầu tiên trong dữ liệu được lấy ra thì các bạn sử dụng phương thức skip với cú pháp:

.skip(number)

Trong đó: number là số lượng bản ghi các bạn muốn bỏ qua.

VD: Lấy hết dữ liệu trong collection products trừ 5 bản ghi đầu tiên.

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({}).skip(5).toArray(function (err,data) {
        if (err) throw err;
        console.log(data);
    });
    db.close();
});

4, Kết hợp.

-Chúng ta hoàn toàn có thể kết hợp các phương thức trên vào trong một lần truy vấn.

VD: Lấy ra 5 bản ghi bắt đầu từ bản ghi thứ 3 đang có trong collection products và sắp xếp chúng theo giá giảm dần.

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({}).skip(3).limit(5).sort({price: -1}).toArray(function (err,data) {
        if (err) throw err;
        console.log(data);
    });
    db.close();
});

Kết quả trả về:

[{
        _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 f2ab312dd2b14a4a8389a,
        name: 'ao phong',
        price: 75000,
        category: 'quan ao'
    },
    {
        _id: 596 f2ab312dd2b14a4a8389b,
        name: 'giay the thao',
        price: 75000,
        category: 'giay dep'
    },
    {
        _id: 596 f2ac608bdd406d0ac723d,
        name: 'ao phong',
        price: 75000,
        category: 'quan ao'
    }
]

Code trên tương ứng với câu lệnh sau trong SQL:

SELECT * FROM products ORDER BY price DESC LIMIT 3,5

5, Lời kết.

-Như các bạn đã thấy thì trong mongodb module chúng ta có thể xếp chồng đường các phương thức lại với nhau như Query builder trong các framework.

Nguồn: Toidicode.com

Thông tin tác giả

Vũ Thanh Tài

Vũ Thanh Tài

The best way to learn is to share

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