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

การใช้ find() ร่วม Dot Notation สำหรับการค้นหาแบบ Recursive ใน MongoDB

MongoDB รองรับการค้นหาข้อมูลในอาร์เรย์ของออบเจ็กต์ (Array of Objects) โดยใช้ Dot Notation ซึ่งจะค้นหาในทุกองค์ประกอบของอาร์เรย์โดยอัตโนมัติ (คล้ายการค้นหาแบบ Recursive)

ตัวอย่างข้อมูลทดสอบ (อาร์เรย์ ClientDetails)

> db.findOperationDemo.insertOne({"ClientDetails": [{"ClientId": 101, "ClientName": "Chris"}, {"ClientId": 102, "ClientName": "Robert"}]});
{ "acknowledged": true, "insertedId": ObjectId("5cd9a118b50a6c6dd317ad99") }
> db.findOperationDemo.insertOne({"ClientDetails": [{"ClientId": 110, "ClientName": "David"}, {"ClientId": 112, "ClientName": "Mike"}]});
{ "acknowledged": true, "insertedId": ObjectId("5cd9a12fb50a6c6dd317ad9a") }

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

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

ผลลัพธ์

{
  "_id": ObjectId("5cd9a118b50a6c6dd317ad99"),
  "ClientDetails": [
    { "ClientId": 101, "ClientName": "Chris" },
    { "ClientId": 102, "ClientName": "Robert" }
  ]
}
{
  "_id": ObjectId("5cd9a12fb50a6c6dd317ad9a"),
  "ClientDetails": [
    { "ClientId": 110, "ClientName": "David" },
    { "ClientId": 112, "ClientName": "Mike" }
  ]
}

ค้นหา ClientId = 110 ในอาร์เรย์ ClientDetails

> db.findOperationDemo.find({"ClientDetails.ClientId": 110});

ผลลัพธ์ (คืนเอกสารทั้งหมดที่มี ClientId 110 ในอาร์เรย์)

{
  "_id": ObjectId("5cd9a12fb50a6c6dd317ad9a"),
  "ClientDetails": [
    { "ClientId": 110, "ClientName": "David" },
    { "ClientId": 112, "ClientName": "Mike" }
  ]
}

สรุป: เมื่อใช้ Dot Notation กับฟิลด์ที่เป็นอาร์เรย์ของออบเจ็กต์ (ClientDetails.ClientId) MongoDB จะค้นหาในทุกองค์ประกอบของอาร์เรย์และคืนเอกสารที่มีองค์ประกอบใดองค์ประกอบหนึ่งตรงเงื่อนไข