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

Tìm tài liệu khớp phần tử đầu tiên trong mảng MongoDB

MongoDB cho phép truy vấn chính xác phần tử tại chỉ số cụ thể trong mảng bằng dot notation với chỉ số (ví dụ: array.0.field cho phần tử đầu tiên). Điều này hữu ích khi mảng đại diện cho danh sách có thứ tự ưu tiên.

Tạo dữ liệu mẫu

> db.matchingFirstItemInTheArrayDemo.insertOne( 
  { "ClientDetails": [ { "ClientName": "Larry", "ClientAge":28 } ] } 
);
{ "acknowledged" : true, "insertedId" : ObjectId("5cd7a5d26d78f205348bc636") }

> db.matchingFirstItemInTheArrayDemo.insertOne( 
  { "ClientDetails": [ { "ClientName": "Chris", "ClientAge":56 } ] } 
);
{ "acknowledged" : true, "insertedId" : ObjectId("5cd7a5f56d78f205348bc637") }

> db.matchingFirstItemInTheArrayDemo.insertOne( 
  { "ClientDetails": [ { "ClientName": "Robert", "ClientAge":46 } ] } 
);
{ "acknowledged" : true, "insertedId" : ObjectId("5cd7a6076d78f205348bc638") }

Xem dữ liệu

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

Tìm tài liệu có phần tử đầu tiên ClientName = "Chris"

> db.matchingFirstItemInTheArrayDemo.find({"ClientDetails.0.ClientName":"Chris"});

Kết quả


Giải thích

  • ClientDetails.0.ClientName: Truy cập trường ClientName của phần tử tại chỉ số 0 (phần tử đầu tiên) trong mảng ClientDetails
  • Chỉ số mảng trong MongoDB bắt đầu từ 0
  • Chỉ khớp nếu phần tử đầu tiên thỏa mãn điều kiện
  • Nếu mảng rỗng hoặc phần tử đầu không khớp → tài liệu không được trả về

Mở rộng: Truy vấn các vị trí khác


Kết hợp với $elemMatch (khi mảng có nhiều phần tử)

Nếu mảng có nhiều phần tử và muốn tìm bất kỳ phần tử nào khớp (không chỉ phần tử đầu):


So sánh

Cú phápÝ nghĩa
array.0.fieldChỉ kiểm tra phần tử đầu tiên (index 0)
array.fieldKiểm tra TẤT CẢ phần tử (ít nhất 1 khớp)
{array: {$elemMatch: {field: val}}}Kiểm tra CÓ ÍT NHẤT 1 phần tử khớp (dùng cho điều kiện phức tạp trên cùng 1 phần tử)

Ứng dụng thực tế

  • Hàng đợi (queue): Xử lý item đầu tiên
  • Lịch sử: Xem mục gần nhất (push vào đầu mảng)
  • Ưu tiên: Phần tử đầu = ưu tiên cao nhất