Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

วิธีตรวจสอบฟิลด์ว่าง (Empty Field) ในคอลเลกชัน MongoDB


ใช้ $exists และ $eq ร่วมกัน เพื่อหาค่าว่าง string

เพื่อหาเอกสารที่ฟิลด์มีอยู่แต่เป็นค่าว่าง (empty string) ให้รวม $exists: true และ $eq: ""

ตัวอย่างข้อมูล

> 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": "" });

Query หา LastName ว่าง

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

ผลลัพธ์

{ "_id": ObjectId(...), "FirstName": "Chris", "LastName": "" }
{ "_id": ObjectId(...), "FirstName": "Robert", "LastName": "" }

ความแตกต่าง: ว่าง vs ไม่มีฟิลด์ vs null

QueryMatch
{ LastName: "" }LastName = "" (empty string) **และ** LastName ไม่มี (legacy behavior)
{ LastName: { $exists: true, $eq: "" } }LastName มีอยู่ **และ** เป็น empty string เท่านั้น
{ LastName: { $exists: false } }LastName ไม่มีในเอกสาร
{ LastName: null }LastName = null **หรือ** ไม่มีฟิลด์
{ LastName: { $in: [null, ""] } }LastName เป็น null หรือ empty string

Best Practice: Schema Validation

db.createCollection("demo485", {
  validator: {
    $jsonSchema: {
      properties: {
        LastName: { bsonType: "string", minLength: 1 }
      }
    }
  }
});

Aggregation สำหรับรายงาน

db.demo485.aggregate([
  { $project: { FirstName: 1, LastName: 1, isEmpty: { $eq: ["$LastName", ""] } } },
  { $group: { _id: "$isEmpty", count: { $sum: 1 }, names: { $push: "$FirstName" } } }
]);

Index สำหรับ Empty Field Query

// Partial index - index เฉพาะ non-empty
db.demo485.createIndex(
  { LastName: 1 },
  { partialFilterExpression: { LastName: { $ne: "" } } }
);