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

Lấy giao nhau (intersection) của hai mảng trong MongoDB

Để tìm các phần tử **chung** (giao nhau) giữa hai mảng trong cùng một tài liệu, MongoDB cung cấp toán tử $setIntersection trong Aggregation Pipeline. Toán tử này trả về mảng các giá trị xuất hiện trong **cả hai** mảng đầu vào (loại bỏ trùng lặp).

1. Tạo bộ sưu tập với 2 mảng

> db.demo61.insertOne({
    "Values1": [10, 20, 30, 40, 50],
    "Values2": [30, 100, 70, 120, 40]
});
{ "acknowledged": true, "insertedId": ObjectId("5e286e28cfb11e5c34d8992a") }

2. Xem dữ liệu

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

Kết quả:

{ "_id": ObjectId("..."), "Values1": [10, 20, 30, 40, 50], "Values2": [30, 100, 70, 120, 40] }

3. Aggregation: Tính giao nhau

> db.demo61.aggregate([
    {
        $project: {
            BothValues: { $setIntersection: ["$Values1", "$Values2"] }
        }
    }
]);

4. Kết quả

{ "_id": ObjectId("..."), "BothValues": [30, 40] }

Các toán tử Set khác trong Aggregation:

  • $setUnion: Hợp (union) - tất cả phần tử duy nhất từ cả 2 mảng.
  • $setDifference: Hiệu (difference) - phần tử ở mảng 1 nhưng không ở mảng 2.
  • $setEquals: Kiểm tra 2 mảng có cùng phần tử (bỏ qua thứ tự, trùng lặp).
  • $setIsSubset: Kiểm tra mảng 1 có phải tập con của mảng 2 không.
  • $anyElementTrue, $allElementsTrue: Logic trên mảng boolean.

Lưu ý: $setIntersection loại bỏ duplicate và không giữ thứ tự.