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

Tìm kiếm trong mảng đối tượng MongoDB

Sử dụng toán tử $elemMatch để tìm kiếm trong mảng đối tượng với nhiều điều kiện trên cùng một phần tử.

Ví dụ minh họa

Tạo collection searchArrayDemo với mảng đối tượng ChiTietNhanVien:

> db.searchArrayDemo.insertOne({
  "HoNhanVien": "Adam", "TenNhanVien": "Smith",
  "NgaySinh": ISODate("1992-01-31T13:45:10Z"),
  "KyNang": ["Spring and Hibernate Framework", "Machine Learning"],
  "ChiTietNhanVien": [
    {"LinhVucHieuSuat": "Java", "Nam": 2001},
    {"LinhVucHieuSuat": "Python", "Nam": 2005}
  ]
});
> db.searchArrayDemo.insertOne({
  "HoNhanVien": "Carol", "TenNhanVien": "Taylor",
  "NgaySinh": ISODate("1993-04-21T11:10:20Z"),
  "KyNang": ["C++", "Cloud Computing"],
  "ChiTietNhanVien": [
    {"LinhVucHieuSuat": "C++", "Nam": 1998},
    {"LinhVucHieuSuat": "C++ Game Developer", "Nam": 2007}
  ]
});

Trường hợp 1: Tìm thấy (C++ năm 1998)

> db.searchArrayDemo.find({ChiTietNhanVien: {$elemMatch: {LinhVucHieuSuat: "C++", Nam: 1998}}}).pretty();

Trả về document của Carol.

Trường hợp 2: Không tìm thấy (C năm 1996)

> db.searchArrayDemo.find({ChiTietNhanVien: {$elemMatch: {LinhVucHieuSuat: "C", Nam: 1996}}}).pretty();

Không trả về document nào.

Điểm quan trọng: $elemMatch yêu cầu cùng một phần tử mảng thỏa mãn TẤT CẢ điều kiện. Không dùng $elemMatch sẽ match nếu các điều kiện thỏa mãn bởi các phần tử khác nhau.