Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Triển khai toán tử $or trong MongoDB

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

  • $or nhận một mảng các điều kiện truy vấn
  • Trường StudentNames là 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ửLogicVí dụ
$orOR (ít nhất 1 đúng){$or: [{a:1}, {b:2}]}
$andAND (tất cả đúng){$and: [{a:1}, {b:2}]}
$norNOR (tất cả sai){$nor: [{a:1}, {b:2}]}
$notNOT (phủ định 1 điều kiện){a: {$not: {$gt: 5}}}