Giới thiệu
Để tìm các tài liệu mà một trường có giá trị (không null và không phải chuỗi rỗng ""), bạn sử dụng toán tử $nin (not in) để loại trừ cả hai giá trị này.
Cú pháp
db.tenCollection.find({ tenTruong: { $nin: [ null, "" ] } });
Ví dụ minh họa
1. Tạo dữ liệu có trường UserName với các giá trị khác nhau
> db.khongNullRong.insertOne({"TenNguoiDung":"Larry","Tuoi":24});
{ "acknowledged" : true, "insertedId" : ObjectId("5c9d20b6a629b87623db1b26") }
> db.khongNullRong.insertOne({"TenNguoiDung":"","Tuoi":29});
{ "acknowledged" : true, "insertedId" : ObjectId("5c9d20bea629b87623db1b27") }
> db.khongNullRong.insertOne({"TenNguoiDung":"Sam","Tuoi":32});
{ "acknowledged" : true, "insertedId" : ObjectId("5c9d20c7a629b87623db1b28") }
> db.khongNullRong.insertOne({"TenNguoiDung":null,"Tuoi":27});
{ "acknowledged" : true, "insertedId" : ObjectId("5c9d20d2a629b87623db1b29") }
> db.khongNullRong.insertOne({"TenNguoiDung":"Robert","Tuoi":26});
{ "acknowledged" : true, "insertedId" : ObjectId("5c9d20dda629b87623db1b2a") }
> db.khongNullRong.insertOne({"TenNguoiDung":"","Tuoi":23});
{ "acknowledged" : true, "insertedId" : ObjectId("5c9d20e7a629b87623db1b2b") }
2. Truy vấn loại trừ null và chuỗi rỗng
> db.khongNullRong.find({ TenNguoiDung: { $nin: [ null, "" ] } }).pretty();
3. Kết quả - chỉ còn 3 tài liệu có tên hợp lệ
{ "_id" : ObjectId("5c9d20b6a629b87623db1b26"), "TenNguoiDung" : "Larry", "Tuoi" : 24 }
{ "_id" : ObjectId("5c9d20c7a629b87623db1b28"), "TenNguoiDung" : "Sam", "Tuoi" : 32 }
{ "_id" : ObjectId("5c9d20dda629b87623db1b2a"), "TenNguoiDung" : "Robert", "Tuoi" : 26 }
Các phương án thay thế
Cách 1: Dùng $ne kết hợp $exists (phức tạp hơn)
db.collection.find({
tenTruong: { $ne: null, $ne: "" },
tenTruong: { $exists: true }
});
Cách 2: Dùng $expr (MongoDB 3.6+)
db.collection.find({
$expr: {
$and: [
{ $ne: [ "$tenTruong", null ] },
{ $ne: [ "$tenTruong", "" ] }
]
}
});
Cách 3: Dùng $type (chỉ loại null, giữ chuỗi rỗng)
// Chỉ lấy trường kiểu string (loại null)
db.collection.find({ tenTruong: { $type: "string" } });
// Lấy string và number (loại null)
db.collection.find({ tenTruong: { $type: ["string", "number"] } });
Khuyến nghị
Cách $nin: [null, ""] ngắn gọn, dễ đọc và hiệu quả cho hầu hết trường hợp.