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

Tìm document MongoDB khi tất cả phần tử mảng có giá trị cụ thể

Kết hợp $exists, $not và $elemMatch

Để tìm document mà tất cả phần tử trong mảng đều thỏa mãn điều kiện, sử dụng logic phủ định: không tồn tại phần tử nào vi phạm điều kiện.

Dữ liệu điểm số

> db.demo15.insertOne({"Details": [{"Score": 56}, {"Score": 78}]});
> db.demo15.insertOne({"Details": [{"Score": 86}, {"Score": 86}]});
> db.demo15.insertOne({"Details": [{"Score": 97}, {"Score": 85}]});

Tìm document có TẤT CẢ Score = 86

> db.demo15.find({
    "Details.Score": { $exists: true },
    "Details": {
        $not: {
            $elemMatch: {
                "Score": { $ne: 86 }
            }
        }
    }
});

Kết quả

{ "_id": ObjectId("..."), "Details": [{ "Score": 86 }, { "Score": 86 }] }

Giải thích logic:

  • $elemMatch tìm phần tử có Score ≠ 86
  • $not phủ định: không có phần tử nào Score ≠ 86
  • $exists: true đảm bảo mảng không rỗng

Cách này hiệu quả hơn so với duyệt từng phần tử ở ứng dụng.