집계 프레임워크를 사용하여 키 필드별로 MongoDB 컬렉션의 모든 중복 문서를 찾습니다.
개념을 이해하기 위해 문서로 컬렉션을 만들어 보겠습니다. 문서로 컬렉션을 생성하는 쿼리는 다음과 같습니다 -
> db.findDuplicateByKeyDemo.insertOne({"StudentId":1,"StudentName":"John"});{ "확인됨" :true, "insertedId" :ObjectId("5c7f5b168d10a061296a3c3a.findKeyDuplicated insertOne({"StudentId":2,"StudentName":"Carol"});{ "승인된":true, "insertedId":ObjectId("5c7f5b1f8d10a061296a3c3b")}> db.findDuplicateByKeyDemo.insertOne({"StudentName":"StudentOne(d"StudentOne) ,"StudentName":"캐롤"});{ "확인됨":true, "insertedId":ObjectId("5c7f5b248d10a061296a3c3c")}> db.findDuplicateByKeyDemo.insertOne({"Student"Student":4", });{ "승인됨" :true, "insertedId" :ObjectId("5c7f5b2d8d10a061296a3c3d")}> db.findDuplicateByKeyDemo.insertOne({"StudentId":5,"StudentName":"Sacknowled") true, "insertedId":ObjectId("5c7f5b398d10a061296a3c3e")}> db.findDuplicateByKeyDemo.insertOne({"StudentId":6,"StudentName":"Carol"});{ "승인됨":true, "5c7f5b438d10a061296a3c3f")}
find() 메서드를 사용하여 컬렉션의 모든 문서를 표시합니다. 쿼리는 다음과 같습니다 -
> db.findDuplicateByKeyDemo.find().pretty();
다음은 출력입니다 -
{ "_id" :ObjectId("5c7f5b168d10a061296a3c3a"), "StudentId" :1, "StudentName" :"John"}{ "_id" :ObjectId("5c7f5b1f8d10a0612996a3c3b" :"캐롤"}{ "_id" :ObjectId("5c7f5b248d10a061296a3c3c"), "StudentId" :3, "StudentName" :"캐롤"}{ "_id" :ObjectId("5c7f5b2d8d10a063296a") 학생 이름":"존"}{ "_id":ObjectId("5c7f5b398d10a061296a3c3e"), "StudentId":5, "StudentName":"Sam"}{ "_id":ObjectId("5c7f5b438d10a061296") , "학생 이름" :"캐롤"}
다음은 모든 중복 문서를 찾는 쿼리입니다." -
> db.findDuplicateByKeyDemo.aggregate([ ... { $group:{ ... _id:{ StudentName:"$StudentName" }, ... UIDS:{ $addToSet:"$_id" }, .. . 카운터:{ $sum:1 } ... } }, ... { $match:{ ... 카운터:{ $gte:2 } ... } }, ... { $sort:{ 카운터:-1} }, ... { $limit :10 }... ]).pretty();
다음은 중복 레코드를 표시하는 출력입니다. 여기서 학생 'Carol'은 3번 오고, John은 2번 온다 -
다음은 출력입니다 -
{ "_id" :{ "학생 이름" :"캐롤" }, "UIDS" :[ ObjectId("5c7f5b248d10a061296a3c3c"), ObjectId("5c7f5b438d10a061296a3c3f(COUNT"), ObjectIf2 }{ "_id" :{ "학생 이름" :"존" }, "UIDS" :[ ObjectId("5c7f5b2d8d10a061296a3c3d"), ObjectId("5c7f5b168d10a061296a3c3a") :2}