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

Kiểm tra trường rỗng (empty field) trong collection MongoDB

Tìm document có trường rỗng (empty string) với $exists + $eq

Kết hợp $exists: true (trường tồn tại) và $eq: "" (giá trị là chuỗi rỗng) để lọc chính xác.

1. Dữ liệu: LastName có thể rỗng

> db.demo485.insertOne({ FirstName: "Chris", LastName: "" });
> db.demo485.insertOne({ FirstName: "David", LastName: "Miller" });
> db.demo485.insertOne({ FirstName: "Chris", LastName: "Brown" });
> db.demo485.insertOne({ FirstName: "Robert", LastName: "" });

2. Tìm LastName rỗng

> db.demo485.find({ "LastName": { "$exists": true, "$eq": "" } });

3. Kết quả

{ "_id": ObjectId("5e82e9f6b0f3fa88e22790a8"), "FirstName": "Chris", "LastName": "" }
{ "_id": ObjectId("5e82ea0fb0f3fa88e22790ab"), "FirstName": "Robert", "LastName": "" }

Tại sao cần $exists: true?

// Chỉ dùng $eq: "" → CŨNG khớp document KHÔNG CÓ trường LastName!
db.demo485.find({ LastName: "" });
// Trả về: Chris (""), Robert (""), VÀ David (KHÔNG CÓ LastName) ❌

// Cần $exists: true để loại trừ field missing
db.demo485.find({ LastName: { $exists: true, $eq: "" } });
// Chỉ trả về: Chris (""), Robert ("") ✅

Các trường hợp "rỗng" khác nhau

Trường hợpQueryKhớp
Chuỗi rỗng ""{ field: { $exists: true, $eq: "" } }field: ""
Null{ field: null }field: null, field: missing
Null (chỉ có null){ field: { $in: [null], $exists: true } }field: null
Missing (không có field){ field: { $exists: false } }không có field
Mảng rỗng []{ field: { $size: 0 } }field: []
Object rỗng {}{ field: { $eq: {} } }field: {}

Ví dụ tổng hợp: Tìm "chưa có họ" (missing OR empty OR null)

db.demo485.find({
    $or: [
        { LastName: { $exists: false } },
        { LastName: "" },
        { LastName: null }
    ]
});

Index cho truy vấn empty field

// Partial index: chỉ index doc CÓ LastName (bỏ qua missing)
db.demo485.createIndex(
    { LastName: 1 },
    { partialFilterExpression: { LastName: { $exists: true } } }
);

// Sparse index (legacy): chỉ index doc CÓ field (kể cả null, "")
db.demo485.createIndex({ LastName: 1 }, { sparse: true });

Validation schema (MongoDB 3.2+)

// Yêu cầu LastName tồn tại và không rỗng
db.createCollection("users", {
    validator: {
        $jsonSchema: {
            required: ["LastName"],
            properties: {
                LastName: { bsonType: "string", minLength: 1 }
            }
        }
    }
});