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

Kiểm tra trường MongoDB là mảng rỗng [] hay đối tượng rỗng {}?

Sử dụng kết hợp $gt: {} và $exists: false trên chỉ số mảng 0. Cú pháp:

db.yourCollectionName.find({
    "yourOuterFieldName": { "$gt": {} },
    "yourOuterFieldName.0": { "$exists": false }
});

Tạo collection với các trường hợp

> db.checkFieldDemo.insert([
    { _id: 1010, StudentDetails: {} },
    { _id: 1011, StudentDetails: [{ StudentId: 1 }] },
    { _id: 1012, StudentDetails: [{}] },
    { _id: 1013 },
    { _id: 1014, StudentDetails: null },
    { _id: 1015, StudentDetails: { StudentId: 1 } }
]);
BulkWriteResult({ "nInserted": 6, ... })

Hiển thị tất cả

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

Truy vấn: StudentDetails là object rỗng {} (không phải mảng, không phải null)

> db.checkFieldDemo.find({
    "StudentDetails": { "$gt": {} },
    "StudentDetails.0": { "$exists": false }
});

Kết quả (chỉ _id 1015 khớp — object có trường StudentId):

{
    "_id": 1015,
    "StudentDetails": { "StudentId": 1 }
}

Giải thích:

  • { "$gt": {} } — loại bỏ null, mảng rỗng [], object rỗng {} (vì {} không > {})
  • "StudentDetails.0": { "$exists": false } — loại bỏ mảng (vì mảng có index 0)
  • Kết quả: chỉ giữ lại object không rỗng

Lưu ý: Cách này dựa trên hành vi so sánh BSON. Để kiểm tra chính xác kiểu, dùng $type (ví dụ: { StudentDetails: { $type: "object" } } kết hợp { StudentDetails: { $ne: {} } }).