การเข้าถึงฟิลด์ใน Subdocument (embedded document) ใช้ Dot Notation ใน find() query และ projection
> db.demo670.insertOne({
... id: 101,
... "details": {
... Name: "Chris", Age: 21, CountryName: "US", SubjectName: "MongoDB"
... }
... });
{ "acknowledged" : true, "insertedId" : ObjectId("5ea3e31d04263e90dac943de") }
> db.demo670.insertOne({id: 102, "details": {Name: "David", Age: 22, CountryName: "UK", SubjectName: "MySQL"}});
{ "acknowledged" : true, "insertedId" : ObjectId("5ea3e33604263e90dac943df") }
แสดงข้อมูล:
> db.demo670.find();
คิวรีค้นหา SubjectName = "MongoDB" แล้วดึง CountryName
> db.demo670.find({"details.SubjectName": "MongoDB"}, {"details.CountryName": 1});ผลลัพธ์:
Dot Notation Syntax
- Query:
{"details.SubjectName": "MongoDB"}- เข้าถึงฟิลด์ใน object - Projection:
{"details.CountryName": 1}- ดึงเฉพาะฟิลด์ย่อย - Update:
{$set: {"details.Age": 25}}- อัปเดตฟิลด์ใน object
ความแตกต่าง: Subdocument vs Array of Objects
| ประเภท | โครงสร้าง | Query |
|---|---|---|
| Subdocument (Object) | {details: {Name: "Chris"}} | {"details.Name": "Chris"} |
| Array of Objects | {details: [{Name: "Chris"}]} | {$elemMatch} หรือ {"details.Name": "Chris"} |