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

Array Match ใน MongoDB ด้วย $all Operator

การจับคู่อาร์เรย์ที่ต้องมี ทุกค่า ที่ระบุ ใช้โอเปอเรเตอร์ $all

> db.demo668.createIndex({"ListOfSubject": 1});
{ "createdCollectionAutomatically" : true, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
> db.demo668.insert({"ListOfSubject": ["MySQL", "Java", "C"]});
WriteResult({ "nInserted" : 1 })
> db.demo668.insert({"ListOfSubject": ["MongoDB", "Python", "C++"]});
WriteResult({ "nInserted" : 1 })
> db.demo668.insert({"ListOfSubject": ["C#", "Spring", "Hibernate", "MongoDB"]});
WriteResult({ "nInserted" : 1 })

แสดงข้อมูล:

> db.demo668.find();

คิวรีค้นหาที่มีทั้ง "MongoDB" และ "C++"

> db.demo668.find({"ListOfSubject": {$all: ["MongoDB", "C++"]}});

ผลลัพธ์ - ได้เฉพาะเอกสารที่ 2 (มีทั้งคู่):


$all vs $in

รายละเอียด $all

  • ลำดับในอาร์เรย์ไม่สำคัญ
  • อาร์เรย์ในเอกสารอาจมีค่าเพิ่มเติมได้
  • ใช้ Multikey Index ได้ (สร้าง index บนฟิลด์อาร์เรย์)
  • ค่าใน $all ต้องไม่ซ้ำกัน (duplicate จะ error)

Use Cases

  • ค้นหาสินค้าที่มีแท็กครบทุกอย่างที่ลูกค้าต้องการ
  • หาผู้ใช้ที่มีทักษบทั้งหมดที่ระบุ
  • Filter สินค้าที่มีคุณสมบัติครบตามเงื่อนไข
OperatorLogicExample Match
$in: [A, B]ORมี A หรือ B (หรือทั้งคู่)
$all: [A, B]ANDต้องมี A และ B ทั้งคู่