Toán tử $eq (equality) trong MongoDB khớp tài liệu nơi **giá trị trường bằng giá trị chỉ định**. Khi trường là **mảng**, $eq sẽ khớp nếu **mảng chứa giá trị đó** (không cần là toàn bộ mảng). Đây là hành vi mặc định "array matching" của MongoDB.
1. Tạo dữ liệu: Trường Ids là mảng string
> db.demo426.insert({ "Ids": ["110", "120", "101"] });
> db.demo426.insert({ "Ids": ["100", "201", "401"] });
> db.demo426.insert({ "Ids": ["501", "600", "700"] });
2. Xem dữ liệu
> db.demo426.find().pretty();
Kết quả: 3 tài liệu với mảng Ids khác nhau.
3. Tìm tài liệu có mảng Ids chứa "501" (dùng $eq)
> db.demo426.find({ "Ids": { $eq: "501" } });
Tương đương đơn giản hơn: db.demo426.find({ "Ids": "501" }) (implicit $eq).
4. Kết quả
{ "_id": ObjectId("5e75e527bbc41e36cc3cae74"), "Ids": ["501", "600", "700"] }
Giải thích: MongoDB tự động "unwind" logic khi so sánh scalar với array: { field: value } khớp nếu value nằm trong mảng field.
So sánh:
{ Ids: "501" }/{ Ids: { $eq: "501" } }: Khớp nếu mảng **chứa** "501".{ Ids: { $eq: ["501", "600", "700"] } }: Khớp nếu mảng **bằng hệt** (cùng phần tử, cùng thứ tự).{ Ids: { $all: ["501", "600"] } }: Khớp nếu mảng **chứa cả 2** (thứ tự bất kỳ).