Toán tử $or trong MongoDB thực hiện logic OR trên một mảng các biểu thức truy vấn. Tài liệu được trả về nếu nó khớp với ít nhất một trong các điều kiện.
Cú pháp
db.yourCollectionName.find({
$or: [
{ "yourFieldName": yourValue1 },
{ "yourFieldName": yourValue2 }
]
}).pretty();
Tạo dữ liệu mẫu
> db.orOperatorDemo.insertOne({"StudentNames":["John","Carol","Sam"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd6b80a6d78f205348bc61b") }
> db.orOperatorDemo.insertOne({"StudentNames":["Robert","Chris","David"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd6b8266d78f205348bc61c") }
> db.orOperatorDemo.insertOne({"StudentNames":["John"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd6b8346d78f205348bc61d") }
Xem dữ liệu
> db.orOperatorDemo.find().pretty();
Truy vấn với $or
Tìm tài liệu có StudentNames chứa "Carol" HOẶC "John":
> db.orOperatorDemo.find({ $or: [{ "StudentNames": "Carol" }, { "StudentNames": "John" }] }).pretty();Kết quả
Giải thích
$ornhận một mảng các điều kiện truy vấn- Trường
StudentNameslà mảng, MongoDB so khớp: mảng chứa giá trị - Tài liệu 1: Chứa cả "John" và "Carol" → khớp
- Tài liệu 2: Không chứa "John" cũng không chứa "Carol" → không khớp
- Tài liệu 3: Chứa "John" → khớp
$or trên nhiều trường khác nhau
Kết hợp $or với $and
Hiệu năng và Index
- MongoDB có thể sử dụng index cho $or nếu mỗi điều kiện trong $or đều có index hỗ trợ
- Tạo index cho từng trường:
db.coll.createIndex({field1: 1}); db.coll.createIndex({field2: 1}); - Nếu một điều kiện không có index → collection scan
- Giới hạn: $or với nhiều điều kiện phức tạp có thể chậm
Toán tử logic liên quan
| Toán tử | Logic | Ví dụ |
|---|---|---|
$or | OR (ít nhất 1 đúng) | {$or: [{a:1}, {b:2}]} |
$and | AND (tất cả đúng) | {$and: [{a:1}, {b:2}]} |
$nor | NOR (tất cả sai) | {$nor: [{a:1}, {b:2}]} |
$not | NOT (phủ định 1 điều kiện) | {a: {$not: {$gt: 5}}} |