Giới thiệu
Để tìm tất cả tài liệu chứa một trường cụ thể, bất kể giá trị của trường đó là gì (kể cả null, chuỗi rỗng, 0, false), bạn sử dụng toán tử $exists: true.
Cú pháp
db.tenCollection.find({ tenTruong: { $exists: true } });
Ví dụ minh họa
1. Tạo dữ liệu: Một số doc có StudentAge, một số không
> db.kiemTraTonTaiTruong.insertOne({"TenSinhVien":"John","TuoiSinhVien":null});
{ "acknowledged" : true, "insertedId" : ObjectId("5c9d1d60a629b87623db1b22") }
> db.kiemTraTonTaiTruong.insertOne({"TenSinhVien":"Larry","TuoiSinhVien":null});
{ "acknowledged" : true, "insertedId" : ObjectId("5c9d1d70a629b87623db1b23") }
> db.kiemTraTonTaiTruong.insertOne({"TenSinhVien":"Chris","TuoiSinhVien":""});
{ "acknowledged" : true, "insertedId" : ObjectId("5c9d1d7ba629b87623db1b24") }
> db.kiemTraTonTaiTruong.insertOne({"TenSinhVien":"Robert","TuoiSinhVien":""});
{ "acknowledged" : true, "insertedId" : ObjectId("5c9d1d81a629b87623db1b25") }
2. Tìm tất cả doc có trường TuoiSinhVien (kể cả null và "")
> db.kiemTraTonTaiTruong.find({ TuoiSinhVien: { $exists: true } });
3. Kết quả - trả về cả 4 tài liệu
{ "_id" : ObjectId("5c9d1d60a629b87623db1b22"), "TenSinhVien" : "John", "TuoiSinhVien" : null }
{ "_id" : ObjectId("5c9d1d70a629b87623db1b23"), "TenSinhVien" : "Larry", "TuoiSinhVien" : null }
{ "_id" : ObjectId("5c9d1d7ba629b87623db1b24"), "TenSinhVien" : "Chris", "TuoiSinhVien" : "" }
{ "_id" : ObjectId("5c9d1d81a629b87623db1b25"), "TenSinhVien" : "Robert", "TuoiSinhVien" : "" }
4. Chỉ lấy trường TuoiSinhVien (loại bỏ TenSinhVien)
> db.kiemTraTonTaiTruong.find(
{ TuoiSinhVien: { $exists: true } },
{ TenSinhVien: 0 }
);
Lưu ý quan trọng: $exists vs $ne null
| Truy vấn | Trả về doc có trường | Trả về doc KHÔNG có trường |
|---|---|---|
{ truong: { $exists: true } } | Có (kể cả null, "") | Không |
{ truong: { $ne: null } } | Có (trừ null) | Có (vì field missing ≠ null) |
Quan trọng: Trong MongoDB, trường không tồn tại (missing) khác với trường tồn tại mà giá trị null. $ne: null sẽ trả về cả doc không có trường đó!
Kết hợp: Tồn tại VÀ không null/rỗng
db.collection.find({
tenTruong: { $exists: true, $nin: [null, ""] }
});