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