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

วิธีดึงเอกสารที่จับคู่ในอาร์เรย์ด้วย $elemMatch ใน MongoDB

ใช้ตัวดำเนินการ $elemMatch เพื่อค้นหาเอกสารที่มีออบเจกต์ในอาร์เรย์ตรงตามเงื่อนไขหลายอย่างพร้อมกัน เริ่มต้นด้วยการสร้างคอลเลกชันตัวอย่าง:

> db.getMatchingDocumentDemo.insertOne(
  {
    _id : 1,
    "UserDetails":[
      { "UserName":"John", "UserAge":23 }
    ]
  }
);
{ "acknowledged" : true, "insertedId" : 1 }
> db.getMatchingDocumentDemo.insertOne(
  { _id : 2, "UserDetails":[ { "UserName":"Larry", "UserAge":24 } ] }
);
{ "acknowledged" : true, "insertedId" : 2 }

แสดงเอกสาร:

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

คิวรี่ค้นหาเอกสารที่มี UserDetails ซึ่งมี UserAge = 24:

> db.getMatchingDocumentDemo.find({UserDetails: {$elemMatch: {UserAge: 24}}});

ความแตกต่างระหว่าง $elemMatch และ dot notation:

  • {UserDetails: {$elemMatch: {UserAge: 24}}} - จับคู่ออบเจกต์ ตัวเดียวกัน ที่มี UserAge = 24
  • {"UserDetails.UserAge": 24} - จับคู่ถ้ามี ออบเจกต์ใดออบเจกต์หนึ่ง มี UserAge = 24 (ผลลัพธ์เหมือนกันในตัวอย่างนี้ แต่วิธีแรกแม่นยำกว่าสำหรับเงื่อนไขหลายอย่าง)

$elemMatch จำเป็นเมื่อต้องการจับคู่หลายเงื่อนไขใน ออบเจกต์เดียวกัน ของอาร์เรย์