Bạn có thể dễ dàng nhận ra các bản sao bằng 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 } } }
])
Các $group
điều hành trong bước đầu tiên được sử dụng để nhóm các tài liệu theo các giá trị quan trọng foreign
và value
và sau đó tạo ra một loạt các _id
giá trị cho mỗi người trong số các tài liệu được nhóm lại như lĩnh vực uniqueIds
sử dụ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 để sử dụng trong các giai đoạn đường ống sau này với nhà điều hành $sum
.
Trong giai đoạn đường ống thứ hai, hãy sử dụng toán tử $match
để lọc ra tất cả tài liệu với số lượng 1. Tài liệu được lọc đại diện cho các phím chỉ mục duy nhất.
Các tài liệu còn lại sẽ là tài liệu trong bộ sưu tập có giá trị khóa trùng lặp cho cặp foreing
& value
.