반응형
둘 이상의 필드에 대한 항목에 대한 중복 항목 찾기 Mongo
다음과 같은 문서가 있습니다.
{
"_id" : ObjectId("557eaf444ba222d545c3dffc"),
"foreing" : ObjectId("538726124ba2222c0c0248ae"),
"value" : "test",
}
쌍에 대한 중복 값이 있는 모든 문서를 찾고 싶습니다.foreing
&value
.
다음 집계 파이프라인 작업을 실행하여 중복 항목을 쉽게 식별할 수 있습니다.
db.collection.aggregate([
{
"$group": {
"_id": { "foreing": "$foreing", "value": "$value" },
"uniqueIds": { "$addToSet": "$_id" },
"count": { "$sum": 1 }
}
},
{ "$match": { "count": { "$gt": 1 } } }
])
첫 번째 단계의 연산자는 문서를 그룹화하는 데 사용됩니다.foreign
그리고.value
키 값을 입력한 다음 배열을 만듭니다._id
그룹화된 각 문서에 대한 값.uniqueIds
연산자를 사용하여 필드를 입력합니다.각 그룹에 대한 고유한 식 값 배열을 제공합니다.운영자와 함께 나중의 파이프라인 단계에서 사용할 그룹화된 문서의 총 수를 가져옵니다.
두 번째 파이프라인 단계에서 연산자를 사용하여 카운트가 1인 모든 문서를 필터링합니다.필터링된 문서는 고유한 색인 키를 나타냅니다.
나머지 문서는 쌍에 대해 중복된 키 값을 가진 컬렉션의 문서입니다.foreing
&value
.
2개의 키를 기준으로 그룹을 구성하고 카운트가 1보다 큰 요소를 선택하면 중복 항목을 찾을 수 있습니다.
쿼리:- 다음과 같습니다.
db.mycollection.aggregate(
{ $group: {
_id: { foreing: "$foreing", value: "$value" },
count: { $sum: 1 },
docs: { $push: "$_id" }
}},
{ $match: {
count: { $gt : 1 }
}}
)
OUTPUT :- 다음과 같습니다.
{
"result" : [
{
"_id" : {
"foreing" : 1,
"value" : 2
},
"count" : 2,
"docs" : [
ObjectId("34567887654345678987"),
ObjectId("34567887654345678987")
]
}
],
"ok" : 1
}
참조 링크 : - 동일한 필드의 mongo 문서를 찾는 방법
언급URL : https://stackoverflow.com/questions/35624531/mongo-find-duplicates-for-entries-for-two-or-more-fields
반응형
'programing' 카테고리의 다른 글
SQL에서 조건부 UPDATE 문 사용 (0) | 2023.07.16 |
---|---|
PHPExcel 기본 워크시트 이름을 다른 이름으로 변경 (0) | 2023.07.16 |
라즈베리 파이의 성능이 오픈 JDK와 오라클 JDK 사이에 그렇게 차이가 나는 이유는 무엇입니까? (0) | 2023.07.16 |
단일 파일/디렉토리를 '기트 커밋'하는 방법 (0) | 2023.07.16 |
Oracle의 익명 TABLE 또는 VARRAY 유형 (0) | 2023.07.11 |