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

Trích xuất tài liệu MongoDB chứa chuỗi cụ thể ($match Aggregation)

Để lọc tài liệu trong Aggregation Pipeline dựa trên việc một trường (có thể trong mảng object) chứa chuỗi cụ thể, bạn dùng stage $match với cú pháp truy vấn chuẩn (Regex hoặc exact match). $match trong aggregation hoạt động y hệt find() nhưng cho phép kết hợp với các stage khác.

1. Tạo dữ liệu: 2 tài liệu, mỗi tài liệu có mảng Information (object id, Name)

> db.demo424.insert({ "Information": [{ id: 10, Name: "Chris" }, { id: 11, Name: "David" }] });
> db.demo424.insert({ "Information": [{ id: 101, Name: "Mike" }, { id: 102, Name: "John" }] });

2. Xem dữ liệu

> db.demo424.find();

Kết quả: 2 tài liệu, mảng Information khác nhau.

3. Aggregation: $match tài liệu có Information.Name = "Chris"

> db.demo424.aggregate([
    { $match: { "Information.Name": "Chris" } }
]);

4. Kết quả: Trả về TOÀN BỘ tài liệu cha (không chỉ phần tử khớp)

{ "_id": ObjectId("..."), "Information": [
    { "id": 10, "Name": "Chris" },
    { "id": 11, "Name": "David" }
] }

Giải thích:

  • $match lọc ở cấp **tài liệu (document)**. Nếu mảng Information chứa "Chris", cả tài liệu được giữ lại.
  • Để chỉ lấy phần tử "Chris" trong mảng -> Dùng $unwind + $match (xem bài 1003070919).
  • Có thể dùng Regex: { $match: { "Information.Name": /Chris/ } }.

Tối ưu: Đặt $match **đầu pipeline** (sau $unwind nếu cần) để dùng index và giảm dữ liệu xử lý cho các stage sau.