Sử dụng toán tử $exists để tìm các document có hoặc không có một trường cụ thể, bất kể giá trị của trường đó là gì (kể cả null).
Cú pháp
// Trường TỒN TẠI
db.collection.find({ "tênTrường": { $exists: true } })
// trường KHÔNG TỒN TẠI
db.collection.find({ "tênTrường": { $exists: false } })
Ví dụ minh họa
Tạo collection checkFieldExistsOrNotDemo với các document có số field khác nhau:
> db.checkFieldExistsOrNotDemo.insertOne({ "StudentName": "Larry" });
> db.checkFieldExistsOrNotDemo.insertOne({ "StudentName": "John", "StudentAge": 21 });
> db.checkFieldExistsOrNotDemo.insertOne({ "StudentName": "Chris", "StudentAge": 24, "StudentCountryName": "US" });
> db.checkFieldExistsOrNotDemo.insertOne({ "StudentName": "Robert", "StudentAge": 21, "StudentCountryName": "UK", "StudentHobby": ["Teaching", "Photography"] });
Hiển thị tất cả:
> db.checkFieldExistsOrNotDemo.find().pretty();
Kết quả:
{ "_id" : ..., "StudentName" : "Larry" }
{ "_id" : ..., "StudentName" : "John", "StudentAge" : 21 }
{ "_id" : ..., "StudentName" : "Chris", "StudentAge" : 24, "StudentCountryName" : "US" }
{ "_id" : ..., "StudentName" : "Robert", "StudentAge" : 21, "StudentCountryName" : "UK", "StudentHobby" : [ "Teaching", "Photography" ] }
Case 1: Tìm document CÓ trường "StudentHobby"
> db.checkFieldExistsOrNotDemo.find({ "StudentHobby": { $exists: true } }).pretty();
Kết quả: Chỉ document của Robert (vì chỉ Robert có trường này).
{ "_id" : ..., "StudentName" : "Robert", "StudentAge" : 21, "StudentCountryName" : "UK", "StudentHobby" : [ "Teaching", "Photography" ] }
Case 2: Tìm document KHÔNG CÓ trường "StudentTechnicalSubject"
> db.checkFieldExistsOrNotDemo.find({ "StudentTechnicalSubject": { $exists: false } }).pretty();
Kết quả: Trả về TẤT CẢ 4 document (vì không document nào có trường này).
Case 3: Trường tồn tại nhưng giá trị là null
> db.test.insertOne({ "a": 1, "b": null });
> db.test.find({ "b": { $exists: true } }); // Trả về document (vì trường b tồn tại, dù giá trị null)
> db.test.find({ "b": null }); // Trả về document (khớp null VÀ missing field)
> db.test.find({ "b": { $in: [null], $exists: true } }); // Chỉ khớp null, không khớp missing field
Ứng dụng thực tế
- Dọn dẹp dữ liệu: Tìm document thiếu field bắt buộc.
- Schema migration: Kiểm tra field mới đã được thêm cho tất cả document chưa.
- Conditional logic: Xử lý khác nhau tùy field có/không.