Giải pháp. một số giải pháp được đưa ra dưới đây để loại bỏ các bản ghi trùng lặp trong MongoDB. Đầu tiên, chúng tôi sẽ tạo kịch bản sau đó và chúng tôi sẽ khắc phục sự cố bằng một số lệnh.
Giả sử chúng ta có bộ sưu tập Nhân viên như dưới đây
{
"_id". ObjectId["5e5f5cf8cad2677f9f839323"],
"Tên". "Dilip",
"EmpId". 1. 0,
"Bộ phận". "NÓ"
}
{
"_id". ObjectId["5e5f5d20cad2677f9f839327"],
"Tên". "Dilip",
"EmpId". 1. 0,
"Bộ phận". "NÓ"
}
{
"_id". ObjectId["5e5f5d27cad2677f9f839328"],
"Tên". "Dilip",
"EmpId". 1. 0,
"Bộ phận". "NÓ"
}
{
"_id". ObjectId["5e5f5d3bcad2677f9f839329"],
"Tên". "Anil",
"EmpId". 2. 0,
"Bộ phận". "nhân sự"
}
{
"_id". ObjectId["5e5f5d42cad2677f9f83932a"],
"Tên". "Anil",
"EmpId". 2. 0,
"Bộ phận". "nhân sự"
}
Chúng tôi có thể xem các tài liệu trùng lặp cho nhân viên "Dilip" và "Anil". Bây giờ chúng ta sẽ làm gì, chúng ta xóa tài liệu ngoại trừ từng tài liệu
Sử dụng tổng hợp nhóm
var trùng lặpIds = [];
db. Nhân viên. tổng hợp[[
{
$group. {
_id. {
EmpId. "$EmpId"
},
lặp. {
"$addToSet". "$_id"
},
đếm. {
"$sum". 1
}
}
}, {
$match. {
đếm. {
"$gt". 1
}
}
}
], {
cho phépDiskUse. đúng
}]. forEach[function [doc] {
doc. bịp bợm. ca[];
doc. bịp bợm. forEach[hàm [dupId] {
id trùng lặp. đẩy[dupId];
}]
}];
printjson[duplicatesIds];
db. Nhân viên. xóa [{_id. {$in. DuplicateIds}}]
db. Nhân viên. tìm thấy[];
Bây giờ chúng ta sẽ phân tích truy vấn được viết ở trên
1- varplicationsIds = []. Đây là một khai báo mảng mà truy vấn này sẽ đẩy các ID trùng lặp.
2-{$group. {_Tôi. {EmpId. "$EmpId"},dup. {"$addToSet". "$_id"} , đếm. {"$sum". 1}}}. Ở đây chúng tôi đang nhóm các bản ghi thay mặt cho EmpId và sử dụng lệnh $addToSet, chúng tôi có thể tạo một mảng "dups" và đếm. {"$sum". 1} đang đếm các bản ghi trùng lặp.
3- {$match. {đếm. {"$gt". 1}}}. Ở đây chúng tôi đang lọc các bản ghi có số đếm lớn hơn 1. Như quy trình nhóm ở trên, chúng tôi đang đếm các bản ghi trùng lặp thay mặt cho EmpId.
4- ForEach. ở đây chúng ta đang lặp lại từng bản ghi được nhóm EmpId, ở đây chúng ta sẽ tìm thấy mảng các bản ghi trùng lặp, chẳng hạn
"lừa đảo". [
ObjectId["5e5f5d20cad2677f9f839327"],
ObjectId["5e5f5d27cad2677f9f839328"],
ObjectId["5e5f5cf8cad2677f9f839323"]
].
5- tài liệu. bịp bợm. sự thay đổi[]. Ở đây chúng tôi đang xóa một bản ghi sẽ không bị xóa và Điều đó có nghĩa là chúng tôi sẽ xóa các bản sao ngoại trừ một tài liệu.
6- tài liệu. bịp bợm. forEach[hàm [dupId]. ở đây một lần nữa, chúng tôi đang lặp lại mảng để đẩy [duplicatesIds. push[dupId]] nó ghi [duplicatesIds] vào mảng đã khai báo ở trên.