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 MongoDBmongoose.connect('mongodb://{USERNAME}}:{password}@{IP}:{PORT}/{DB_NAME}', { useNewUrlParser: true, useUnifiedTopology: true });// Định nghĩa schema cho bảng shopsconst 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ùngconst duplicates = await Shop.aggregate([{$group: {_id: "$email",ids: { $push: "$_id" }, // Lưu trữ tất cả các IDcount: { $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ặpfor (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ặpawait 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ốiawait mongoose.connection.close();}}// Gọi hàmremoveDuplicateEmails();
Thay tên bảng shops bằng tên bảng mà bạn muốn xóa
Nhận xét
Đăng nhận xét