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

คิวรี AND บนอาร์เรย์ใน MongoDB (ใช้ $all)

ใช้ $all หาเอกสารที่อาร์เรย์มี ทุกค่า ที่ระบุ

เมื่อต้องการหาเอกสารที่อาร์เรย์ฟิลด์มีสมาชิกครบทุกค่าที่กำหนด (เหมือน AND Logic) ใช้โอเปอเรเตอร์ $all

ตัวอย่างข้อมูล: วิชาที่นักเรียนชอบ

> db.andQueryDemo.insertOne({"StudentName":"Carol Taylor","FavouriteSubject":["C","Java","MongoDB","MySQL"]});
> db.andQueryDemo.insertOne({"StudentName":"David Miller","FavouriteSubject":["C++","Java","MongoDB","SQL Server"]});
> db.andQueryDemo.insertOne({"StudentName":"Carol Taylor","FavouriteSubject":["Python","PL/SQL"]});

คิวรี: หานักเรียนที่ชอบ ทั้ง Java และ MongoDB

> db.andQueryDemo.find({FavouriteSubject:{$all:["Java","MongoDB"]}}).pretty();

ผลลัพธ์

{ "StudentName" : "Carol Taylor", "FavouriteSubject" : [ "C", "Java", "MongoDB", "MySQL" ] }
{ "StudentName" : "David Miller", "FavouriteSubject" : [ "C++", "Java", "MongoDB", "SQL Server" ] }

ความแตกต่าง $all vs $in

โอเปอเรเตอร์ความหมายตัวอย่าง Match
$all: ["A","B"]ต้องมี ทั้ง A และ B (AND)["A","B"], ["B","A","C"], ["A","X","B"]
$in: ["A","B"]มี อย่างน้อย 1 ใน A หรือ B (OR)["A"], ["B"], ["A","B"], ["A","C"]

รายละเอียดเพิ่มเติม

  • $all ใช้ Index ได้ (Multi-key Index)
  • ลำดับในอาร์เรย์ไม่สำคัญ
  • ค่าซ้ำในอาร์เรย์ Query ไม่ส่งผล (ถือว่า 1 ค่า)
  • รองรับ Object/Sub-document ได้ เช่น { $all: [ { "name": "A" }, { "name": "B" } ] }