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

MongoDB Query เข้าถึง Object ใน Array ด้วย Dot Notation

การ Query เข้าถึง Object ภายใน Array ใน MongoDB สามารถใช้ Dot Notation ได้โดยตรง เนื้อหานี้สาธิตการค้นหาเอกสารที่มี details.SubjectName มีค่า "Servlet" อยู่ใน Array

ตัวอย่างข้อมูลทดสอบ

> db.demo299.insertOne({
  "id":100, "Name":"Robert",
  "details":[
    { "SubjectName":["C++","Python"] },
    { "SubjectName":["Spring","Hibernate"] }
  ]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e4d685a5d93261e4bc9ea4b") }

> db.demo299.insertOne({
  "id":101, "Name":"Adam",
  "details":[
    { "SubjectName":["Python","JSP"] },
    { "SubjectName":["Servlet","Operating System"] }
  ]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e4d685b5d93261e4bc9ea4c") }

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

> db.demo299.find();
{
  "_id" : ObjectId("5e4d685a5d93261e4bc9ea4b"),
  "id" : 100,
  "Name" : "Robert",
  "details" : [
    { "SubjectName" : [ "C++", "Python" ] },
    { "SubjectName" : [ "Spring", "Hibernate" ] }
  ]
}
{
  "_id" : ObjectId("5e4d685b5d93261e4bc9ea4c"),
  "id" : 101,
  "Name" : "Adam",
  "details" : [
    { "SubjectName" : [ "Python", "JSP" ] },
    { "SubjectName" : [ "Servlet", "Operating System" ] }
  ]
}

Query ค้นหา Object ใน Array

> db.demo299.find({"details.SubjectName":"Servlet"});

ผลลัพธ์

{
  "_id" : ObjectId("5e4d685b5d93261e4bc9ea4c"),
  "id" : 101,
  "Name" : "Adam",
  "details" : [
    { "SubjectName" : [ "Python", "JSP" ] },
    { "SubjectName" : [ "Servlet", "Operating System" ] }
  ]
}

คำอธิบายและข้อจำกัด

  • Dot Notation details.SubjectName จะ Match ถ้า Element ใด Element หนึ่งใน Array details มี SubjectName ที่ Contain "Servlet"
  • คืนเอกสารทั้งหมด (Whole Document) ไม่ใช่แค่ Element ที่ Match
  • หากต้องการคืนเฉพาะ Element ที่ Match ใช้ $elemMatch ใน Projection หรือ Aggregation $filter
  • ตัวอย่าง $elemMatch Projection:
    db.demo299.find(
      {"details.SubjectName":"Servlet"},
      {details: { $elemMatch: { SubjectName: "Servlet" } }}
    )