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

Kiểm tra sự tồn tại của phần tử trong document MongoDB ($exists)

Để kiểm tra xem một trường/phần tử có tồn tại trong document hay không, sử dụng toán tử $exists.

Tạo collection với dữ liệu không đồng nhất

> db.demo497.insertOne({"details":[{"Name":"Chris"},{"Name":"Bob"}]});
> db.demo497.insertOne({"details":[{"Name":"Carol"}]});
> db.demo497.insertOne({"details":[{}]})

Hiển thị dữ liệu

> db.demo497.find();

Kết quả (3 document):

1. details: [{Name:"Chris"}, {Name:"Bob"}]
2. details: [{Name:"Carol"}]
3. details: [{}]  // object rỗng, không có Name

Truy vấn: Name khác "Carol" HOẶC details không tồn tại

> db.demo497.find({
  $or: [
    { "details.Name": { $ne: "Carol" } },
    { details: { $exists: false } }
  ]
});

Kết quả (document 1 và 3):

1. details: [{Name:"Chris"}, {Name:"Bob"}]  // Name ≠ Carol
3. details: [{}]  // Name không tồn tại trong object rỗng → $ne khớp

Giải thích:

  • {$ne: "Carol"}: Khớp khi Name tồn tại VÀ khác "Carol", HOẶC Name **không tồn tại** (quan trọng!)
  • {$exists: false}: Khớp khi trường details hoàn toàn không có trong document
  • Document 3: details tồn tại (mảng có 1 object rỗng) → $exists: false sai, nhưng details.Name không tồn tại → $ne đúng → khớp

Lưu ý quan trọng về $exists vs $ne:

Kết hợp $exists: true với $ne nếu muốn loại trừ cả null và missing.

Điều kiệnField tồn tại, giá trị khácField tồn tại, giá trị nullField không tồn tại
{field: {$ne: "val"}}✓ Khớp✓ Khớp✓ Khớp
{field: {$exists: true}}✓ Khớp✓ Khớp✗ Không khớp
{field: {$exists: false}}✗ Không khớp✗ Không khớp✓ Khớp