Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

ดึงเอกสาร MongoDB ด้วย $or Operator เงื่อนไข OR

โอเปอเรเตอร์ $or ทำ Logical OR ระหว่างเงื่อนไขหลายอย่าง คืนค่าเอกสารที่ตรง อย่างน้อย 1 เงื่อนไข

> db.demo674.insertOne({Name: "Chris", Age: 21});
{ "acknowledged" : true, "insertedId" : ObjectId("5ea3f33604263e90dac943eb") }
> db.demo674.insertOne({Name: "David", Age: 23});
{ "acknowledged" : true, "insertedId" : ObjectId("5ea3f33c04263e90dac943ec") }
> db.demo674.insertOne({Name: "Bob", Age: 21});
{ "acknowledged" : true, "insertedId" : ObjectId("5ea3f34204263e90dac943ed") }
> db.demo674.insertOne({Name: "John", Age: 24});
{ "acknowledged" : true, "insertedId" : ObjectId("5ea3f34804263e90dac943ee") }

แสดงข้อมูล:

> db.demo674.find();

คิวรี $or: Name = "David" OR Age = 21

> db.demo674.find({$or: [{Name: "David"}, {Age: 21}]});

ผลลัพธ์ - 3 เอกสาร (David, Chris, Bob):


$or vs $in vs Implicit AND

Performance: $or และ Index

  • $or สามารถใช้ Index ได้ถ้า ทุก clause มี Index
  • MongoDB จะทำ Index Scan แยกแต่ละ clause แล้ว Union ผลลัพธ์
  • ถ้า clause ไหนไม่มี Index → Collection Scan ทั้งคิวรี

ตัวอย่าง $or ซับซ้อน

db.collection.find({
  $or: [
    {status: "active", age: {$gte: 18}},
    {status: "premium"},
    {tags: {$in: ["vip", "admin"]}}
  ]
});
OperatorLogicExample
Implicit (comma)AND{Name: "David", Age: 21} = Name=David และ Age=21
$orOR{$or: [{Name: "David"}, {Age: 21}]} = Name=David หรือ Age=21
$inOR (same field){Name: {$in: ["David", "Chris"]}} = Name=David หรือ Chris