Bạn có thể dễ dàng xác định các bản sao bằng cách chạy hoạt động đường ống tổng hợp sau:
db.collection.aggregate([
{
"$group": {
"_id": { "foreing": "$foreing", "value": "$value" },
"uniqueIds": { "$addToSet": "$_id" },
"count": { "$sum": 1 }
}
},
{ "$match": { "count": { "$gt": 1 } } }
])
$group
trong bước đầu tiên được sử dụng để nhóm các tài liệu theo foreign
và giá trị value
các giá trị khóa và sau đó tạo một mảng _id
giá trị cho mỗi tài liệu được nhóm dưới dạng uniqueIds
sử dụng trường $addToSet
nhà điều hành. Điều này cung cấp cho bạn một mảng các giá trị biểu thức duy nhất cho mỗi nhóm. Nhận tổng số tài liệu được nhóm lại để sử dụng trong các giai đoạn quy trình sau với $sum
nhà điều hành.
Trong giai đoạn quy trình thứ hai, hãy sử dụng $match
toán tử để lọc ra tất cả các tài liệu có số lượng là 1. Các tài liệu được lọc ra đại diện cho các khóa chỉ mục duy nhất.
Các tài liệu còn lại sẽ là những tài liệu trong bộ sưu tập có các giá trị khóa trùng lặp cho cặp foreing
&value
.