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

ค้นหาเอกสารที่มีค่าตรงกับรายการอย่างน้อย 1 ค่า ($in Operator) ใน MongoDB

ใช้ Operator $in เพื่อค้นหาเอกสารที่ฟิลด์อาร์เรย์มีค่าตรงกับ อย่างน้อย 1 ค่า จากรายการที่ระบุ

สร้างคอลเลกชันและข้อมูลตัวอย่าง

> db.atleastOneMatchDemo.insertOne({"StudentFavouriteSubject":["MySQL","MongoDB"]});
{ "acknowledged": true, "insertedId": ObjectId("5cd2db5db64f4b851c3a13ce") }
> db.atleastOneMatchDemo.insertOne({"StudentFavouriteSubject":["Java","C","MongoDB"]});
{ "acknowledged": true, "insertedId": ObjectId("5cd2db71b64f4b851c3a13cf") }
> db.atleastOneMatchDemo.insertOne({"StudentFavouriteSubject":["Python","C++","SQL Server"]});
{ "acknowledged": true, "insertedId": ObjectId("5cd2db87b64f4b851c3a13d0") }
> db.atleastOneMatchDemo.insertOne({"StudentFavouriteSubject":["Ruby","Javascript","C#","MySQL"]});
{ "acknowledged": true, "insertedId": ObjectId("5cd2dba9b64f4b851c3a13d1") }

แสดงข้อมูลทั้งหมด

> db.atleastOneMatchDemo.find().pretty();

ผลลัพธ์:

{
  "_id": ObjectId("5cd2db5db64f4b851c3a13ce"),
  "StudentFavouriteSubject": ["MySQL", "MongoDB"]
}
{
  "_id": ObjectId("5cd2db71b64f4b851c3a13cf"),
  "StudentFavouriteSubject": ["Java", "C", "MongoDB"]
}
{
  "_id": ObjectId("5cd2db87b64f4b851c3a13d0"),
  "StudentFavouriteSubject": ["Python", "C++", "SQL Server"]
}
{
  "_id": ObjectId("5cd2dba9b64f4b851c3a13d1"),
  "StudentFavouriteSubject": ["Ruby", "Javascript", "C#", "MySQL"]
}

ค้นหาเอกสารที่มีวิชา MongoDB หรือ MySQL อย่างน้อย 1 วิชา

> db.atleastOneMatchDemo.find({"StudentFavouriteSubject": {"$in": ["MongoDB", "MySQL"]}}).pretty();

ผลลัพธ์ (3 จาก 4 เอกสาร):

{
  "_id": ObjectId("5cd2db5db64f4b851c3a13ce"),
  "StudentFavouriteSubject": ["MySQL", "MongoDB"]
}
{
  "_id": ObjectId("5cd2db71b64f4b851c3a13cf"),
  "StudentFavouriteSubject": ["Java", "C", "MongoDB"]
}
{
  "_id": ObjectId("5cd2dba9b64f4b851c3a13d1"),
  "StudentFavouriteSubject": ["Ruby", "Javascript", "C#", "MySQL"]
}

เอกสารของ Python/C++/SQL Server ไม่ตรงเงื่อนไข จึงไม่ปรากฏ

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

  • Syntax: {field: {$in: [value1, value2, ...]}}
  • ทำงานกับทั้งฟิลด์แบบ Single Value และ Array
  • หากฟิลด์เป็น Array: ตรวจสอบว่า element ใด element หนึ่งใน Array ตรงกับค่าในรายการ $in
  • เทียบเท่า SQL: WHERE field IN (val1, val2, ...)

Operator ที่เกี่ยวข้อง

  • $nin (Not In): ค้นหาที่ ไม่มี ค่าใดค่าหนึ่งในรายการ
  • $all: ต้องมี ทุกค่า ในรายการ (AND logic)
  • $elemMatch: สำหรับ Array of Objects ต้องการจับคู่หลายเงื่อนไขใน Object เดียวกัน