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

ค้นหา Array ของ Hash ใน MongoDB อย่างไร?

บทความนี้จะสาธิตวิธีการค้นหาข้อมูลภายใน Array ที่ประกอบด้วย Hash (Object) ใน MongoDB โดยใช้ตัวอย่างคอลเลกชันชื่อ searchAnArrayDemo ที่มีฟิลด์ TechnicalDetails เป็น Array ของ Object ซึ่งแต่ละ Object มีฟิลด์ Language

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

> db.searchAnArrayDemo.insertOne({_id:1,"TechnicalDetails":[{"Language":"MongoDB"}]});
{ "acknowledged" : true, "insertedId" : 1 }
> db.searchAnArrayDemo.insertOne({_id:2,"TechnicalDetails":[{"Language":"MySQL"}]});
{ "acknowledged" : true, "insertedId" : 2 }
> db.searchAnArrayDemo.insertOne({_id:3,"TechnicalDetails":[{"Language":"MongoDB"}]});
{ "acknowledged" : true, "insertedId" : 3 }
> db.searchAnArrayDemo.insertOne({_id:4,"TechnicalDetails":[{"Language":"MongoDB"}]});
{ "acknowledged" : true, "insertedId" : 4 }
> db.searchAnArrayDemo.insertOne({_id:5,"TechnicalDetails":[{"Language":"Java"}]});
{ "acknowledged" : true, "insertedId" : 5 }

แสดงข้อมูลทั้งหมดในคอลเลกชัน

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

ผลลัพธ์:

{ "_id" : 1, "TechnicalDetails" : [ { "Language" : "MongoDB" } ] }
{ "_id" : 2, "TechnicalDetails" : [ { "Language" : "MySQL" } ] }
{ "_id" : 3, "TechnicalDetails" : [ { "Language" : "MongoDB" } ] }
{ "_id" : 4, "TechnicalDetails" : [ { "Language" : "MongoDB" } ] }
{ "_id" : 5, "TechnicalDetails" : [ { "Language" : "Java" } ] }

ค้นหา Array ของ Hash โดยใช้ Dot Notation

ใช้ Dot Notation (TechnicalDetails.Language) เพื่อเข้าถึงฟิลด์ภายใน Object ที่อยู่ใน Array

> db.searchAnArrayDemo.find({'TechnicalDetails.Language':'MongoDB'}).count();

ผลลัพธ์: 3 (พบเอกสาร 3 รายการที่มี Language เป็น MongoDB)

คำอธิบายเพิ่มเติม

  • Dot Notation ช่วยให้ค้นหาได้ทั้งใน Array และ Nested Object โดยไม่ต้องใช้ $elemMatch
  • Query นี้จะคืนค่าเอกสารที่มี อย่างน้อยหนึ่งรายการ ใน Array ตรงกับเงื่อนไข
  • หากต้องการค้นหาหลายเงื่อนไขใน Array เดียวกัน ให้ใช้ $elemMatch