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

Tìm trong mảng object và khớp trường email trong MongoDB

Truy vấn document chứa object trong mảng thỏa mãn cả hai trường EmployeeName và EmployeeEmail.

Tạo collection demo144:

> db.demo144.insertOne({
   "EmployeeDetails": [
      {"EmployeeName":"Chris","EmployeeEmail":"Chris12@gmail.com"},
      {"EmployeeName":"Bob","EmployeeEmail":"bo22@gmail.com"}
   ]
});
> db.demo144.insertOne({
   "EmployeeDetails": [
      {"EmployeeName":"David","EmployeeEmail":"david@gmail.com"},
      {"EmployeeName":"Carol","EmployeeEmail":"Carol@gmail.com"}
   ]
});

Tìm document có EmployeeDetails chứa Name=David VÀ Email=david@gmail.com, projection chỉ lấy Name:

> db.demo144.find(
   {"EmployeeDetails.EmployeeName":"David","EmployeeDetails.EmployeeEmail":"david@gmail.com"},
   {"EmployeeDetails.EmployeeName":1}
);

Kết quả trả về cả 2 object trong mảng (project không lọc subdocument):

{
   "_id" : ObjectId("5e32f1f5fdf09dd6d08539ba"),
   "EmployeeDetails" : [
      {"EmployeeName":"David"},
      {"EmployeeName":"Carol"}
   ]
}

Lưu ý: Projection ở cấp document không lọc được element trong mảng. Dùng aggregate với $filter hoặc $elemMatch để chỉ lấy subdocument khớp.