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

Khớp ID và lấy tài liệu với $eq trên mảng trong MongoDB

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ỳ).