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

Kiểm tra sự tồn tại của trường (field) trong MongoDB với $exists

Sử dụng toán tử $exists để tìm các document có hoặc không có một trường cụ thể, bất kể giá trị của trường đó là gì (kể cả null).

Cú pháp

// Trường TỒN TẠI
db.collection.find({ "tênTrường": { $exists: true } })

// trường KHÔNG TỒN TẠI
db.collection.find({ "tênTrường": { $exists: false } })

Ví dụ minh họa

Tạo collection checkFieldExistsOrNotDemo với các document có số field khác nhau:

> db.checkFieldExistsOrNotDemo.insertOne({ "StudentName": "Larry" });
> db.checkFieldExistsOrNotDemo.insertOne({ "StudentName": "John", "StudentAge": 21 });
> db.checkFieldExistsOrNotDemo.insertOne({ "StudentName": "Chris", "StudentAge": 24, "StudentCountryName": "US" });
> db.checkFieldExistsOrNotDemo.insertOne({ "StudentName": "Robert", "StudentAge": 21, "StudentCountryName": "UK", "StudentHobby": ["Teaching", "Photography"] });

Hiển thị tất cả:

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

Kết quả:

{ "_id" : ..., "StudentName" : "Larry" }
{ "_id" : ..., "StudentName" : "John", "StudentAge" : 21 }
{ "_id" : ..., "StudentName" : "Chris", "StudentAge" : 24, "StudentCountryName" : "US" }
{ "_id" : ..., "StudentName" : "Robert", "StudentAge" : 21, "StudentCountryName" : "UK", "StudentHobby" : [ "Teaching", "Photography" ] }

Case 1: Tìm document CÓ trường "StudentHobby"

> db.checkFieldExistsOrNotDemo.find({ "StudentHobby": { $exists: true } }).pretty();

Kết quả: Chỉ document của Robert (vì chỉ Robert có trường này).

{ "_id" : ..., "StudentName" : "Robert", "StudentAge" : 21, "StudentCountryName" : "UK", "StudentHobby" : [ "Teaching", "Photography" ] }

Case 2: Tìm document KHÔNG CÓ trường "StudentTechnicalSubject"

> db.checkFieldExistsOrNotDemo.find({ "StudentTechnicalSubject": { $exists: false } }).pretty();

Kết quả: Trả về TẤT CẢ 4 document (vì không document nào có trường này).

Case 3: Trường tồn tại nhưng giá trị là null

> db.test.insertOne({ "a": 1, "b": null });
> db.test.find({ "b": { $exists: true } });  // Trả về document (vì trường b tồn tại, dù giá trị null)
> db.test.find({ "b": null });              // Trả về document (khớp null VÀ missing field)
> db.test.find({ "b": { $in: [null], $exists: true } }); // Chỉ khớp null, không khớp missing field

Ứng dụng thực tế

  • Dọn dẹp dữ liệu: Tìm document thiếu field bắt buộc.
  • Schema migration: Kiểm tra field mới đã được thêm cho tất cả document chưa.
  • Conditional logic: Xử lý khác nhau tùy field có/không.