Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Trích xuất giá trị sub-array trong MongoDB?

Để trích xuất (extract) một element cụ thể từ mảng con (sub-array) trong MongoDB, bạn sử dụng toán tử projection $elemMatch.

Tạo dữ liệu mẫu

> db.extractSubArrayDemo.insertOne( 
  { 
    _id: 101, 
    "clientName":"Larry", 
    "ClientDetails": [ 
      { "ClientProjectName":"Online Game", "DeveloperTeamSize": 10 }, 
      { "ClientProjectName":"Pig Dice Game", "DeveloperTeamSize": 12 }, 
      { "ClientProjectName":"Web Student Tracker", "DeveloperTeamSize": 11 } 
    ] 
  } 
);
{ "acknowledged" : true, "insertedId" : 101 }

Hiển thị document:

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

Trích xuất element khớp điều kiện

Chỉ lấy element trong mảng ClientDetails có ClientProjectName = "Pig Dice Game":

> db.extractSubArrayDemo.find({ '_id': 101 },{ _id: 0, ClientDetails: { $elemMatch: {ClientProjectName: 'Pig Dice Game' } }}).pretty();

Kết quả:


Giải thích $elemMatch (projection)

  • Trả về element đầu tiên trong mảng khớp với điều kiện
  • Chỉ hoạt động trong projection (tham số 2 của find)
  • Khác với $elemMatch trong query (tham số 1) - dùng để match document
  • Nếu không có element nào khớp, trường mảng sẽ không xuất hiện trong kết quả

Cách này hiệu quả khi mảng lớn và bạn chỉ cần 1 element cụ thể thay vì tải toàn bộ mảng.