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à một yếu tố quan trọng để tối ưu hóa ứng dụng của bạn. Để làm được điều này, việc nắm vững các toán tử truy vấn của MongoDB là rất cần thiết. Các toán tử này giúp bạn dễ dàng tìm kiếm, lọc và phân loại dữ liệu theo nhiều tiêu chí khác nhau. Trong bài viết này, chúng ta sẽ cùng khám phá các toán tử so sánh và toán tử logic trong MongoDB, cùng với cú pháp và ví dụ cụ thể để bạn có thể áp dụng chúng trong các truy vấn của mình.
I. Toán Tử So Sánh
1. $eq (equal)
Toán tử $eq
được 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 (not equal)
Toán tử $ne
được dùng để tì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 (greater than)
Toán tử $gt
được dùng để tìm các document mà giá trị của trường có giá trị 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 (less than)
Toán tử $lt
thường dùng để tìm các document mà giá trị của trường của chú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 (greater than or equal to)
Toán tử $gte
dùng để tìm các document mà giá trị của trường dữ liệu 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 nơi mà giá trị của trường **score
**lớn hơn hoặc bằng 50.
6. $lte (less than or equal to)
**Toán tử $lte
**dùng để tìm các document có giá trị của của 1 trường nhỏ hơn hoặc bằng một giá trị cụ thể cần tìm .
Cú pháp:
{ "field": { "$lte": value } }
Ví dụ:
db.collection.find({ "age": { "$lte": 30 } })
⇒ Truy vấn này tìm document nơi mà trường age
nhỏ hơn hoặc bằng 30.
7. $in (in)
**Toán tử $in
**dùng để tìm các document mà giá trị của cầm tìm 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 (not in)
Toán tử $nin
dùng để tìm các document mà giá trị cần tìm 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 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
⇒ Các bạn có thể vào trang chính của mongodb để đọc kỹ hơn về toán tử so sánh nha
II. Toán Tử Logic
1. $and
Toán tử $and
dùng để tìm document có nhiều biểu thức mà tất cả các điều kiện trong mảng đều được thỏa 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 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 document có ít nhất một điều kiện trong mảng được thỏa mãn.
Cú pháp:
- toán tử được phân biệt các giá trị cần tìm qua dấu “,”
{ "$or": [ { "field1": value1 }, { "field2": value2 } ] }
Ví dụ:
db.collection.find({ "$or": [ { "status": "active" }, { "age": { "$lt": 18 } } ] })
⇒ Truy vấn này tìm document nơi 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 document nơi mà điều kiện không được thỏa 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 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
được dùng để tìm document mà không có điều kiện nào được thỏa 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 tài liệu 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 Toán Tử Logic:
- $and: Tất cả các điều kiện trong mảng đều được thỏa mãn.
- $or: Ít nhất một điều kiện trong mảng được thỏa mãn.
- $not: Điều kiện không được thỏa mãn.
- $nor: Không có điều kiện nào trong mảng được thỏa mãn.
⇒ Các bạn có thể vào trang chính của mongodb để đọc kỹ hơn về toán tử so sánh nha