Khi làm việc với MongoDB, việc truy vấn và phân tích dữ liệu hiệu quả là điều rất cần thiết để tối ưu hóa ứng dụng của bạn. Bài viết này sẽ giúp bạn nắm vững các toán tử truy vấn, bao gồm các toán tử so sánh và toán tử logic, từ đó cải thiện khả năng tìm kiếm, lọc và phân loại dữ liệu.
I. Toán Tử So Sánh
1. $eq (bằng)
Toán tử $eq được sử dụng để tìm các document mà giá trị của trường bằng một giá trị cụ thể.
Cú pháp:
{ "field": { "$eq": value } }
        Ví dụ:
db.collection.find({ "age": { "$eq": 25 } })
        Truy vấn này tìm document mà trường age bằng 25.
2. $ne (không bằng)
Toán tử $ne tìm kiếm các document mà giá trị của trường không bằng một giá trị cụ thể.
Cú pháp:
{ "field": { "$ne": value } }
        Ví dụ:
db.collection.find({ "status": { "$ne": "inactive" } })
        Truy vấn này tìm document mà trường status không phải là "inactive".
3. $gt (lớn hơn)
Toán tử $gt được dùng để tìm các document mà giá trị của trường lớn hơn một giá trị cụ thể khác.
Cú pháp:
{ "field": { "$gt": value } }
        Ví dụ:
db.collection.find({ "score": { "$gt": 80 } })
        Truy vấn này tìm document mà trường score lớn hơn 80.
4. $lt (nhỏ hơn)
Toán tử $lt được dùng để tìm các document mà giá trị của trường nhỏ hơn một giá trị cụ thể.
Cú pháp:
{ "field": { "$lt": value } }
        Ví dụ:
db.collection.find({ "score": { "$lt": 50 } })
        Truy vấn này tìm các document mà trường score nhỏ hơn 50.
5. $gte (lớn hơn hoặc bằng)
Toán tử $gte được dùng để tìm các document mà giá trị của trường lớn hơn hoặc bằng một giá trị cụ thể.
Cú pháp:
{ "field": { "$gte": value } }
        Ví dụ:
db.collection.find({ "score": { "$gte": 50 } })
        Truy vấn này tìm các document mà trường score lớn hơn hoặc bằng 50.
6. $lte (nhỏ hơn hoặc bằng)
Toán tử $lte tìm các document có giá trị của trường nhỏ hơn hoặc bằng một giá trị cụ thể.
Cú pháp:
{ "field": { "$lte": value } }
        Ví dụ:
db.collection.find({ "age": { "$lte": 30 } })
        Truy vấn này tìm các document mà trường age nhỏ hơn hoặc bằng 30.
7. $in (ở trong)
Toán tử $in tìm các document mà giá trị nằm trong một mảng.
Cú pháp:
{ "field": { "$in": [value1, value2, ...] } }
        Ví dụ:
db.collection.find({ "category": { "$in": ["books", "electronics"] } })
        Truy vấn này tìm các document có trường category là "books" hoặc "electronics".
8. $nin (không ở trong)
Toán tử $nin tìm các document mà giá trị không nằm trong một mảng cụ thể.
Cú pháp:
{ "field": { "$nin": [value1, value2, ...] } }
        Ví dụ:
db.collection.find({ "status": { "$nin": ["inactive", "suspended"] } })
        Truy vấn này tìm các document mà trường status không phải là "inactive" hoặc "suspended".
Tổng kết về Toán Tử So Sánh:
- $eq: So sánh bằng
 - $ne: So sánh không bằng
 - $gt: Lớn hơn
 - $lt: Nhỏ hơn
 - $gte: Lớn hơn hoặc bằng
 - $lte: Nhỏ hơn hoặc bằng
 - $in: Giá trị nằm trong mảng
 - $nin: Giá trị không nằm trong mảng
 
II. Toán Tử Logic
1. $and
Toán tử $and được sử dụng để tìm các document mà tất cả các điều kiện trong mảng đều được thoả mãn.
Cú pháp:
{ "$and": [ { "field1": value1 }, { "field2": value2 } ] }
        Ví dụ:
db.collection.find({ "$and": [ { "status": "active" }, { "age": { "$gte": 18 } } ] })
        Truy vấn này tìm các document có trường status là "active" và trường age lớn hơn hoặc bằng 18.
2. $or
Toán tử $or được dùng để tìm các document mà ít nhất một điều kiện trong mảng được thoả mãn.
Cú pháp:
{ "$or": [ { "field1": value1 }, { "field2": value2 } ] }
        Ví dụ:
db.collection.find({ "$or": [ { "status": "active" }, { "age": { "$lt": 18 } } ] })
        Truy vấn này tìm các document mà trường status là "active" hoặc trường age nhỏ hơn 18.
3. $not
Toán tử $not được dùng để tìm các document mà điều kiện không được thoả mãn. Điều này bao gồm các tài liệu không chứa trường đó.
Cú pháp:
{ "field": { "$not": { "$condition": value } } }
        Ví dụ:
db.collection.find({ "age": { "$not": { "$gte": 18 } } })
        Truy vấn này tìm các document mà trường age không bằng 18, hiểu đơn giản là sẽ tìm hết tất cả các trường tuổi trừ trường có tuổi bằng 18.
4. $nor
Toán tử $nor tìm các document mà không có điều kiện nào được thoả mãn trong mảng được yêu cầu.
Cú pháp:
{ "$nor": [ { "field1": value1 }, { "field2": value2 } ] }
        Ví dụ:
db.collection.find({ "$nor": [ { "status": "inactive" }, { "age": { "$gte": 18 } } ] })
        Truy vấn này tìm các document mà trường status không phải "inactive" và trường age không lớn hơn hoặc bằng 18.
Tổng kết về Toán Tử Logic:
- $and: Tất cả các điều kiện trong mảng đều được thoả mãn.
 - $or: Ít nhất một điều kiện trong mảng được thoả mãn.
 - $not: Điều kiện không được thoả mãn.
 - $nor: Không có điều kiện nào trong mảng được thoả mãn.
 
Để tìm hiểu thêm về các toán tử trong MongoDB, bạn có thể truy cập trang chính của MongoDB để có thông tin chi tiết hơn.
source: viblo