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

Cách truy vấn MongoDB: trường không null và không rỗng

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.