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

Kiểm tra giá trị null trong MongoDB

MongoDB sử dụng toán tử $type với mã loại 10 (hoặc alias "null") để kiểm tra trường có giá trị null (BSON type null). Điều này khác với trường không tồn tại (missing) hoặc chuỗi rỗng.

Bảng loại BSON Type

TypeNumberAlias
Double1"double"
String2"string"
Object3"object"
Array4"array"
Binary data5"binData"
Undefined6"undefined"
ObjectId7"objectId"
Boolean8"bool"
Date9"date"
Null10"null"
Regular Expression11"regex"

Cú pháp kiểm tra null

db.yourCollectionName.find({"yourFieldName": { $type: 10 }});

Hoặc dùng alias (khuyên dùng):

db.yourCollectionName.find({"yourFieldName": { $type: "null" }});

Tạo dữ liệu mẫu (các trường hợp edge case)

> db.mongoDbEqualDemo.insertOne({"Age":34});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd7e9121a844af18acdffa3") }
> db.mongoDbEqualDemo.insertOne({"Age":""});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd7e9161a844af18acdffa4") }
> db.mongoDbEqualDemo.insertOne({"Age":null});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd7e9191a844af18acdffa5") }
> db.mongoDbEqualDemo.insertOne({"Age":56});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd7e91e1a844af18acdffa6") }
> db.mongoDbEqualDemo.insertOne({});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd7e9261a844af18acdffa7") }
> db.mongoDbEqualDemo.insertOne({"Age":null});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd7e92e1a844af18acdffa8") }

Xem dữ liệu

> db.mongoDbEqualDemo.find().pretty();

Truy vấn chỉ lấy Age = null (type 10)

> db.mongoDbEqualDemo.find({"Age": { $type: 10 }});

Kết quả


Phân biệt các trường hợp

Trường hợpGiá trị{$type: 10}{$eq: null}{$exists: false}
Null explicitnull✅ Khớp✅ Khớp❌
Chuỗi rỗng""❌❌❌
Số 00❌❌❌
Trường không tồn tại(missing)❌✅ Khớp!✅ Khớp
Undefinedundefined❌ (type 6)❌❌

⚠️ Lưu ý quan trọng: $eq: null vs $type: 10

  • {Age: {$eq: null}}: Khớp CẢ null explicit VÀ trường không tồn tại (missing)
  • {Age: {$type: 10}}: CHỈ khớp null explicit (BSON type 10)
  • Để tìm "null hoặc missing": {$or: [{Age: {$type: 10}}, {Age: {$exists: false}}]}

Trong Aggregation


Ứng dụng thực tế

  • Data quality: Phát hiện record thiếu dữ liệu bắt buộc
  • Migration: Xác định record cần backfill
  • Validation: Đảm bảo trường optional thực sự null chứ không phải missing