Liệt kê dữ liệu chỉ có ở bảng table1 mà không có ở bảng table2 trong MongoDB

Hướng dẫn cách liệt kê dữ liệu chỉ có ở bảng `table1` mà không có ở bảng `table2` trong MongoDB, sử dụng phương pháp aggregate và các thao tác lọc.

Trong bài viết này, chúng ta sẽ tìm hiểu cách sử dụng MongoDB để liệt kê dữ liệu chỉ có ở bảng table1 mà không có ở bảng table2. Chúng ta sẽ sử dụng phương thức aggregate kết hợp với $lookup$match để thực hiện các truy vấn cần thiết.

Mã MongoDB:

// Giả sử chúng ta có hai collection: 'table1' và 'table2'

// Dữ liệu trong collection 'table1'
db.table1.insertMany([
    { _id: 1, name: "Alice" },
    { _id: 2, name: "Bob" },
    { _id: 3, name: "Charlie" }
]);

// Dữ liệu trong collection 'table2'
db.table2.insertMany([
    { _id: 1, name: "Alice" },
    { _id: 2, name: "David" }
]);

// Truy vấn để liệt kê dữ liệu chỉ có ở table1
db.table1.aggregate([
    {
        $lookup: {
            from: "table2",
            localField: "name",
            foreignField: "name",
            as: "matched_data"
        }
    },
    {
        $match: {
            "matched_data": { $eq: [] }
        }
    },
    {
        $project: {
            _id: 1,
            name: 1
        }
    }
]);

Giải thích chi tiết từng dòng code

  • Dữ liệu trong collection table1: Tạo một collection table1 với các trường _idname.
  • Dữ liệu trong collection table2: Tạo một collection table2 với các trường _idname.
  • Truy vấn aggregate:
    • $lookup: Kết nối (join) hai collection. from chỉ định collection cần kết nối, localField là trường trong collection hiện tại (table1), foreignField là trường trong collection được kết nối (table2), và as chỉ định tên của mảng kết quả (matched_data).
    • $match: Lọc các bản ghi trong table1 mà không có sự kết nối (matched data) với table2, tức là chỉ lấy các bản ghi mà mảng matched_data rỗng.
    • $project: Chỉ định các trường cần hiển thị trong kết quả cuối cùng, ở đây chỉ lấy _idname.

Yêu cầu hệ thống:

  • MongoDB 4.0 trở lên

Cách cài đặt MongoDB:

Có thể cài đặt MongoDB từ trang web chính thức MongoDB hoặc sử dụng các công cụ quản lý như MongoDB Compass.

Lời khuyên:

  • Sử dụng aggregate với $lookup để thực hiện các truy vấn phức tạp và để lọc dữ liệu hiệu quả.
  • Nên tạo chỉ mục trên các trường được sử dụng trong truy vấn để tăng tốc độ truy vấn.
Tags: MongoDB


Các Hướng Dẫn Cùng Chủ Đề Đang Xem


Đã thêm vào giỏ hàng