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

MongoDB ดึงเฉพาะ Phone Number เป็น Array ด้วย distinct()

Method distinct() สามารถใช้ดึงค่า Unique ของ Nested Field แบบ Deep Path ได้ เนื้อหานี้สาธิตการดึง PhoneNumber จาก details.PhoneDetails.PhoneNumber ทั้ง Collection เป็น Array

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

> db.demo166.insertOne({
  "details": {
    "UserName": "Chris", "UserAge": 29,
    "PhoneDetails": { "PhoneNumber": "98646463533" }
  }
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e368b159e4f06af551997cf") }

> db.demo166.insertOne({
  "details": {
    "UserName": "David", "UserAge": 21,
    "PhoneDetails": { "PhoneNumber": "87664534654" }
  }
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e368b159e4f06af551997d0") }

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

> db.demo166.find();
{
  "_id" : ObjectId("5e368b159e4f06af551997cf"),
  "details" : {
    "UserName" : "Chris", "UserAge" : 29,
    "PhoneDetails" : { "PhoneNumber" : "98646463533" }
  }
}
{
  "_id" : ObjectId("5e368b159e4f06af551997d0"),
  "details" : {
    "UserName" : "David", "UserAge" : 21,
    "PhoneDetails" : { "PhoneNumber" : "87664534654" }
  }
}

Query distinct Phone Number

> db.demo166.distinct("details.PhoneDetails.PhoneNumber");

ผลลัพธ์

[ "98646463533", "87664534654" ]

คำอธิบาย

  • Dot Notation รองรับ Deep Path: details.PhoneDetails.PhoneNumber
  • distinct() คืนค่า Array ของ Unique Values โดยอัตโนมัติ
  • หากมี Duplicate Phone Number จะคืนค่าเพียงครั้งเดียว
  • สามารถเพิ่ม Filter ได้: distinct("details.PhoneDetails.PhoneNumber", { "details.UserAge": { $gt: 25 } })
  • ใช้ Index ได้หากมี Index บน Path นั้น (MongoDB รองรับ Index บน Nested Field)
  • ข้อจำกัด: ผลลัพธ์ ≤ 16MB