Header Ads Widget

Tìm và xóa dữ liệu trùng lặp trong MongoDB

Lệnh tìm những dữ liệu bị trùng, xuất hiện 2 lần. Sau đó xóa dữ liệu trùng, chỉ giữ lại 1 bản ghi đầu tiên

Tìm kiếm và xóa Bản ghi trùng lặp trong MongoDB

1. Đoạn code kết nối dữ liệu

Kết nối tới cơ sở dữ liệu Mongo của bạn
const mongoose = require('mongoose');

// Kết nối đến cơ sở dữ liệu MongoDB
mongoose.connect('mongodb://{USERNAME}}:{password}@{IP}:{PORT}/{DB_NAME}', { useNewUrlParser: true, useUnifiedTopology: true });

// Định nghĩa schema cho bảng shops
const shopSchema = new mongoose.Schema({
    email: { type: String, required: true },
}, { timestamps: true });

2. Code xử lý tìm và xóa

Tìm trong bảng Shops và xóa những bản ghi trùng email, giữ lại bản ghi đầu tiên

const Shop = mongoose.model('shops', shopSchema);

async function removeDuplicateEmails() {
    try {
        // Tìm tất cả các email bị trùng
        const duplicates = await Shop.aggregate([
            {
                $group: {
                    _id: "$email",
                    ids: { $push: "$_id" }, // Lưu trữ tất cả các ID
                    count: { $sum: 1 } // Đếm số lần xuất hiện
                }
            },
            { $match: { count: { $gt: 1 } } } // Chỉ lấy email bị trùng
        ]);

        // Xóa các bản ghi trùng lặp
        for (const duplicate of duplicates) {
            const idsToKeep = duplicate.ids[0]; // Giữ lại ID đầu tiên (cũ nhất)
            const idsToDelete = duplicate.ids.slice(1); // Xóa tất cả ID còn lại
            // Xóa các bản ghi trùng lặp
            await Shop.deleteMany({ _id: { $in: idsToDelete } });
        }

        console.log("Đã xóa các email bị trùng.");
    } catch (error) {
        console.error("Lỗi khi xóa email bị trùng:", error);
    } finally {
        // Đóng kết nối
        await mongoose.connection.close();
    }
}

// Gọi hàm
removeDuplicateEmails();


Thay tên bảng shops bằng tên bảng mà bạn muốn xóa

Nhận xét