[MONGODB] 어떻게하여 MongoDB의 핵심 기반으로 중복을 제거하는 방법?
MONGODB어떻게하여 MongoDB의 핵심 기반으로 중복을 제거하는 방법?
나는 주변에있다하여 MongoDB의 모음 (~ 3 개 백만 레코드)이있다. 내 샘플 기록은 같을 것이다
{ "_id" = ObjectId("50731xxxxxxxxxxxxxxxxxxxx"),
"source_references" : [
"_id" : ObjectId("5045xxxxxxxxxxxxxx"),
"name" : "xxx",
"key" : 123
]
}
나는 같은 source_references.key를 가진 컬렉션에 중복 레코드의 많은 데. (중복 I으로 source_references.key하지 _id을 의미).
내가 source_references.key에 따라 중복 레코드를 제거하려면, 나는 각 레코드를 통과하고있는 경우 기록을 제거하기 위해 일부 PHP 코드를 작성 생각 해요.
몽고 내부 명령 행에서 중복을 제거 할 수있는 방법이 있습니까?
해결법
-
==============================
1.MongoDB를 2.6 이상에서 진정한 인덱스 생성 옵션 : 당신이 source_references.key 식별 레코드를 복제 것이 확실한 경우에는 dropDups와 고유 인덱스를 보장 할 수 있습니다 :
MongoDB를 2.6 이상에서 진정한 인덱스 생성 옵션 : 당신이 source_references.key 식별 레코드를 복제 것이 확실한 경우에는 dropDups와 고유 인덱스를 보장 할 수 있습니다 :
db.things.ensureIndex({'source_references.key' : 1}, {unique : true, dropDups : true})
이것은 각 source_references.key 값의 첫 번째 고유의 문서를 유지하고, 그렇지 않으면 중복 키 위반이 발생할 것이다 후속 문서를 삭제합니다.
중요 사항 :
명백한주의 : 데이터베이스의 백업을 가지고, 당신이 의도하지 않은 데이터 손실에 대해 우려하는 경우 먼저 스테이징 환경에서 이것을 시도.
-
==============================
2.이것은 내 MongoDB를 3.2에 사용되는 가장 쉬운 쿼리 I입니다
이것은 내 MongoDB를 3.2에 사용되는 가장 쉬운 쿼리 I입니다
db.myCollection.find({}, {myCustomKey:1}).sort({_id:1}).forEach(function(doc){ db.myCollection.remove({_id:{$gt:doc._id}, myCustomKey:doc.myCustomKey}); })
속도를 높이기 위해이 프로그램을 실행하기 전에 색인은 customKey
-
==============================
3.Stennie의 유효한 대답은 @ 있지만, 그것은 유일한 방법은 아니다. MongoDB의 설명서가 당신을 요청 가리키고 그 일을하는 동안 매우 신중해야합니다. 다른 두 가지 옵션이 있습니다
Stennie의 유효한 대답은 @ 있지만, 그것은 유일한 방법은 아니다. MongoDB의 설명서가 당신을 요청 가리키고 그 일을하는 동안 매우 신중해야합니다. 다른 두 가지 옵션이 있습니다
-
==============================
4.여기 일을 조금 더 '매뉴얼'방법입니다 :
여기 일을 조금 더 '매뉴얼'방법입니다 :
기본적으로, 첫째, 당신이 관심이있는 모든 고유 키의 목록을 가져옵니다.
그리고 그 각각의 키를 사용하여 검색을 수행하고보다 경우가 해당 검색 반환 더 큰 삭제합니다.
db.collection.distinct("key").forEach((num)=>{ var i = 0; db.collection.find({key: num}).forEach((doc)=>{ if (i) db.collection.remove({key: num}, { justOne: true }) i++ }) });
-
==============================
5.핍 mongo_remove_duplicate_indexes 설치
핍 mongo_remove_duplicate_indexes 설치
더 나은 이해를 위해 mongo_remove_duplicate_indexes의 패키지 소스 코드를 체크 아웃
-
==============================
6.메모리가 충분한 경우 스칼라에서 그런 일을 할 수 있습니다 :
메모리가 충분한 경우 스칼라에서 그런 일을 할 수 있습니다 :
cole.find().groupBy(_.customField).filter(_._2.size>1).map(_._2.tail).flatten.map(_.id) .foreach(x=>cole.remove({id $eq x})
from https://stackoverflow.com/questions/13190370/how-to-remove-duplicates-based-on-a-key-in-mongodb by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 매일 그룹 내에서 MongoDB를 집계 [중복] (0) | 2019.12.13 |
---|---|
[MONGODB] Node.js를에서 데이터베이스를 조롱? (0) | 2019.12.13 |
[MONGODB] MongoDB를이 : errno를 : 127.0.0.1:27017 이유에 연결하지 못했습니다 10061 (0) | 2019.12.13 |
[MONGODB] 중첩 된 스키마 대 몽구스 하위 문서 (0) | 2019.12.13 |
[MONGODB] 블로그 MongoDB의 스키마 설계 (0) | 2019.12.13 |