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

Lọc document MongoDB bằng truy vấn đơn giản ($match)

Để lọc document trong pipeline aggregate, sử dụng $match. Toán tử này truyền tiếp các document khớp điều kiện sang stage tiếp theo.

Tạo collection với mảng lồng nhau

> db.demo629.insertOne({
  "Subject": ["MySQL", "MongoDB"],
  "details": [
    { Name: "Chris", "Marks": 78 },
    { Name: "David", "Marks": 89 }
  ]
});

Hiển thị document gốc

> db.demo629.find();

Kết quả:

{
  "_id" : ObjectId("5e9ae9f56c954c74be91e6b9"),
  "Subject" : [ "MySQL", "MongoDB" ],
  "details" : [
    { "Name" : "Chris", "Marks" : 78 },
    { "Name" : "David", "Marks" : 89 }
  ]
}

Pipeline lọc: unwind + match + project

> db.demo629.aggregate([
  { "$unwind": "$details" },
  {
    "$match": {
      "details.Name": "Chris",
      "Subject": { "$in": ["Java", "MySQL", "Python", "C", "C++"] }
    }
  },
  { "$project": { "details": 1, "_id": 0 } }
]);

Kết quả:

{
  "details" : { "Name" : "Chris", "Marks" : 78 }
}

Giải thích từng stage:

  1. $unwind: "$details": Phân rã mảng details → 2 document riêng biệt
  2. $match: Lọc document có details.Name = "Chris" VÀ Subject chứa một trong các giá trị liệt kê ($in)
  3. $project: Chỉ giữ trường details, ẩn _id

Document với David bị loại do không khớp Name. Subject có "MySQL" khớp điều kiện $in.