ใช้ $nin (Not In) ร่วมกับ $elemMatch และ $not เพื่อหาเอกสารที่อาร์เรย์ **ไม่ได้** ประกอบด้วยค่าเฉพาะบางตัวอย่างเดียว (ต้องมีอย่างน้อยหนึ่งค่าที่ไม่อยู่ในรายการห้าม)
ตัวอย่างการใช้งาน
สร้างคอลเลกชัน combinationOfArrayDemo:
> db.combinationOfArrayDemo.insertOne({"StudentName":"Larry","StudentAge":21,"StudentFavouriteTechnicalSubject":["C","Java"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5c7f77cc8d10a061296a3c58") }
> db.combinationOfArrayDemo.insertOne({"StudentName":"Mike","StudentAge":23,"StudentFavouriteTechnicalSubject":["C++","Java"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5c7f77dc8d10a061296a3c59") }
> db.combinationOfArrayDemo.insertOne({"StudentName":"David","StudentAge":22,"StudentFavouriteTechnicalSubject":["Java"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5c7f77f48d10a061296a3c5a") }
แสดงข้อมูล:
> db.combinationOfArrayDemo.find().pretty();
{"_id" : ObjectId("5c7f77cc8d10a061296a3c58"), "StudentName" : "Larry", "StudentAge" : 21, "StudentFavouriteTechnicalSubject" : [ "C", "Java" ] }
{"_id" : ObjectId("5c7f77dc8d10a061296a3c59"), "StudentName" : "Mike", "StudentAge" : 23, "StudentFavouriteTechnicalSubject" : [ "C++", "Java" ] }
{"_id" : ObjectId("5c7f77f48d10a061296a3c5a"), "StudentName" : "David", "StudentAge" : 22, "StudentFavouriteTechnicalSubject" : [ "Java" ] }
ค้นหานักศึกษาที่มีวิชา **ไม่ได้จำกัดเพียงแค่** "C++" และ "Java" เท่านั้น (ต้องมีวิชาอื่นนอกเหนือจากนี้ หรือไม่มีทั้งคู่):
> db.combinationOfArrayDemo.find({StudentFavouriteTechnicalSubject: {$not: {$elemMatch: {$nin: ['C++', 'Java']}}}}).pretty();
{"_id" : ObjectId("5c7f77dc8d10a061296a3c59"), "StudentName" : "Mike", "StudentAge" : 23, "StudentFavouriteTechnicalSubject" : [ "C++", "Java" ] }
{"_id" : ObjectId("5c7f77f48d10a061296a3c5a"), "StudentName" : "David", "StudentAge" : 22, "StudentFavouriteTechnicalSubject" : [ "Java" ] }
Larry ถูกตัดออก เพราะมี "C" ซึ่งไม่อยู่ในรายการ ['C++', 'Java'] ทำให้ $nin true -> $elemMatch true -> $not false