ใช้ $in แทน $elemMatch สำหรับ First-level Array
สำหรับ Array ระดับบนสุด (First-level Array) ควรใช้ $in operator แทน $elemMatch
Syntax
db.yourCollectionName.find({yourFieldName:{$in:["yourValue"]}}).pretty();
ตัวอย่าง
> db.firstLevelArrayDemo.insertOne({"StudentName":"Chris","StudentTechnicalSkills":["Mongo DB","MySQL","SQL Server"]});
> db.firstLevelArrayDemo.insertOne({"StudentName":"Robert","StudentTechnicalSkills":["C","Java","C++"]});
แสดงข้อมูลทั้งหมด
> db.firstLevelArrayDemo.find().pretty();
ค้นหาด้วย $in: หา Student ที่มี Skill "MongoDB"
> db.firstLevelArrayDemo.find({StudentTechnicalSkills:{$in:["MongoDB"]}}).pretty();
ผลลัพธ์: พบเฉพาะ Chris ที่มี MongoDB ใน Skills
{
"_id" : ObjectId("5ca2360f66324ffac2a7dc71"),
"StudentName" : "Chris",
"StudentTechnicalSkills" : [ "MongoDB", "MySQL", "SQL Server" ]
}
สรุป: $in ใช้สำหรับ First-level Array ง่ายและมีประสิทธิภาพ $elemMatch เหมาะสำหรับ Nested Arrays (Array ของ Objects/Sub-documents)