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

การเลือกฟิลด์ใน MongoDB Query ด้วย Dot Notation

Dot Notation ใน MongoDB ใช้ไม่ได้แค่ Filter Condition แต่ยังใช้ใน Projection (Field Selection) เพื่อเลือกฟิลด์ย่อยภายใน Nested Document/Array ได้ เนื้อหานี้สาธิตการ Query เอกสารที่มี details.Subject = "MongoDB" และ Project เฉพาะ details.Subject เท่านั้น

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

> db.demo302.insertOne({"Id":101,"details":[{"Name":"Chris","Age":21,"Subject":"MySQL"}]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e4d746f5d93261e4bc9ea52") }

> db.demo302.insertOne({"Id":102,"details":[{"Name":"Bob","Age":23,"Subject":"MongoDB"}]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e4d74815d93261e4bc9ea53") }

> db.demo302.insertOne({"Id":103,"details":[{"Name":"David","Age":20,"Subject":"Java"}]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e4d74955d93261e4bc9ea54") }

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

> db.demo302.find();
{
  "_id" : ObjectId("5e4d746f5d93261e4bc9ea52"),
  "Id" : 101,
  "details" : [ { "Name" : "Chris", "Age" : 21, "Subject" : "MySQL" } ]
}
{
  "_id" : ObjectId("5e4d74815d93261e4bc9ea53"),
  "Id" : 102,
  "details" : [ { "Name" : "Bob", "Age" : 23, "Subject" : "MongoDB" } ]
}
{
  "_id" : ObjectId("5e4d74955d93261e4bc9ea54"),
  "Id" : 103,
  "details" : [ { "Name" : "David", "Age" : 20, "Subject" : "Java" } ]
}

Query Field Selection ด้วย Dot Notation

> db.demo302.find(
  {"details.Subject":"MongoDB"},
  {"details.Name":0, "details.Age":0, "_id":0, "Id":0}
);

ผลลัพธ์

{ "details" : [ { "Subject" : "MongoDB" } ] }

คำอธิบาย

  • Filter: {"details.Subject":"MongoDB"} - ค้นหาใน Array details ที่ Element ใด Element หนึ่งมี Subject = MongoDB
  • Projection: ใช้ Exclusion Mode (0) ยกเว้นฟิลด์ที่ไม่ต้องการ
  • details.Name:0, details.Age:0 - ยกเว้นฟิลด์ย่อยใน Object ภายใน Array
  • ผลลัพธ์คงโครงสร้าง Array details ไว้ แต่มีเฉพาะ Subject
  • Note: ไม่สามารถ Project เพื่อ "Filter Element ใน Array" ได้ (ต้องใช้ $elemMatch หรือ Aggregation $filter)