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

ตรวจสอบค่าใน Array Property ใน MongoDB ด้วย $in Operator

บทความนี้แนะนำการใช้ Operator $in เพื่อตรวจสอบว่า Array Field มีค่าที่ต้องการหรือไม่ เหมาะสำหรับการค้นหาเอกสารที่ Array Field ประกอบด้วยค่าเฉพาะ

สร้างข้อมูลตัวอย่าง

> db.valueInArrayDemo.insertOne({"UserName":"John","UserMessage":["Hi","Hello","Bye"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd684cf7924bb85b3f48959") }
> db.valueInArrayDemo.insertOne({"UserName":"Larry","UserMessage":["Thank You","Amazing","Nice"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd684d27924bb85b3f4895a") }
> db.valueInArrayDemo.insertOne({"UserName":"Carol","UserMessage":["Awesome","Bye","Cool"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd684d87924bb85b3f4895b") }

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

> db.valueInArrayDemo.find().pretty();
{
  "_id" : ObjectId("5cd684cf7924bb85b3f48959"),
  "UserName" : "John",
  "UserMessage" : [ "Hi", "Hello", "Bye" ]
}
{
  "_id" : ObjectId("5cd684d27924bb85b3f4895a"),
  "UserName" : "Larry",
  "UserMessage" : [ "Thank You", "Amazing", "Nice" ]
}
{
  "_id" : ObjectId("5cd684d87924bb85b3f4895b"),
  "UserName" : "Carol",
  "UserMessage" : [ "Awesome", "Bye", "Cool" ]
}

ค้นหาเอกสารที่ UserMessage มีค่า "Bye"

> db.valueInArrayDemo.find({UserMessage:{$in:["Bye"]}});

ผลลัพธ์

{
  "_id" : ObjectId("5cd684cf7924bb85b3f48959"),
  "UserName" : "John",
  "UserMessage" : [ "Hi", "Hello", "Bye" ]
}
{
  "_id" : ObjectId("5cd684d87924bb85b3f4895b"),
  "UserName" : "Carol",
  "UserMessage" : [ "Awesome", "Bye", "Cool" ]
}

คำอธิบาย $in Operator

  • { field: { $in: [value1, value2, ...] } } - คืนค่าเอกสารที่ field มีค่า อย่างน้อยหนึ่งค่า ใน Array ที่ระบุ
  • ใช้ได้กับทั้ง Array Field และ Scalar Field
  • เทียบเท่ากับ OR หลายเงื่อนไข: field = value1 OR field = value2 OR ...

ตัวอย่างเพิ่มเติม: ค้นหาหลายค่าพร้อมกัน

// หา User ที่มี Message เป็น "Bye" หรือ "Cool"
db.valueInArrayDemo.find({ UserMessage: { $in: ["Bye", "Cool"] } });

// หา User ที่ชื่อเป็น John, Larry, หรือ Carol
db.valueInArrayDemo.find({ UserName: { $in: ["John", "Larry", "Carol"] } });

ตัวอย่าง: $in กับ Array of Objects

// หาเอกสารที่ tags มี object ที่ name = "mongodb"
db.articles.find({ "tags.name": { $in: ["mongodb", "database"] } });