광고 차단 프로그램이 감지되었습니다

이 사이트는 광고 수익을 통해 무료로 콘텐츠와 서비스를 제공하고 있습니다.

더 나은 서비스를 위해 광고 차단 프로그램을 비활성화 해주세요.

광고 차단 해제 방법 보기
Loading...

MongoDB Compass 특정 조건이 아닌 검색, 다중검색

MongoDB Compass 특정 조건이 아닌 검색, 다중검색에 대한 img

📚 MongoDB Compass 데이터 필터링 마스터 청사진

💡 상황 해독

  • 현재 상태: MongoDB에 크롤링한 데이터가 쌓여있는데, 필요 없는 데이터(틱톡 URL, 내부 IP)가 섞여서 정확한 분석이 어려운 상황
  • 핵심 쟁점:
  • 쿼리 문법은 맞는데 결과가 예상과 다름
  • 여러 조건을 동시에 적용하는 방법 모름
  • 정확한 매칭 vs 패턴 매칭의 차이 이해 부족
  • 예상 vs 현실$ne로 간단히 제외될 줄 알았는데, URL 경로 차이로 인해 필터링이 안 됨
  • 영향 범위: 잘못된 데이터 분석으로 클라이언트 보고서 품질 저하, 크롤링 프로젝트 신뢰도 하락


🔍 원인 투시

  • 근본 원인: MongoDB는 정확히 일치하는 값만 비교하기 때문에 "https://lite.tiktok.com/"와 "https://lite.tiktok.com/t/exam/"는 다른 값으로 인식
  • 연결 고리: 크롤링 → 다양한 URL 형태 수집 → 단순한 $ne 필터 → 예상과 다른 결과
  • 일상 비유:
  • "김철수"를 제외하려는데 "김철수님"도 있어서 걸러지지 않는 상황
  • 주소록에서 "서울시"를 제외하려는데 "서울시 강남구"는 그대로 남아있는 것
  • 숨겨진 요소: URL 구조의 다양성, 정규식의 강력함, MongoDB 쿼리 연산자별 차이점


🛠️ 해결 설계도

  1. 정확한 값 제외: $ne 연산자 마스터하기
  • 핵심 행동: 완전히 일치하는 값 하나만 제외할 때 사용
  • 실행 가이드:
  1. MongoDB Compass → 해당 컬렉션 선택
  2. Filter 탭 클릭
  3. JSON 형태로 조건 입력
  • 성공 지표: 해당 값이 완전히 사라지고 Documents 개수가 줄어듦
  • 예시/코드:
// 변경 전 (틀린 방법)
{"original_url": {"$ne": "https://lite.tiktok.com/"}}

// 변경 후 (올바른 방법)
{"creator_ip": {"$ne": "192.168.219.1"}}

// 핵심 변화 설명
정확히 일치하는 문자열만 제외됨 (대소문자, 공백 모두 정확해야 함)
  • 주의사항: null 값이나 빈 문자열은 별도로 처리해야 함
  1. 패턴 기반 제외: $regex로 도메인 전체 차단
  • 핵심 행동: 특정 패턴을 포함한 모든 값 제외
  • 실행 가이드:
  1. $not과 $regex 조합 사용
  2. 정규식 패턴 작성 시 특수문자 이스케이프 처리
  3. "$options": "i"로 대소문자 구분 없이 검색
  • 성공 지표: 도메인이 포함된 모든 URL이 사라짐
  • 예시/코드:
// 변경 전 (제한적)
{"original_url": {"$ne": "https://lite.tiktok.com/"}}

// 변경 후 (포괄적)
{"original_url": {"$not": {"$regex": "tiktok\\.com", "$options": "i"}}}

// 핵심 변화 설명
tiktok.com이 포함된 모든 URL이 제외됨 (서브도메인, 경로 무관)
  • 주의사항.은 정규식에서 특수문자이므로 \\.로 이스케이프 필요
  1. 다중 조건 적용: $and로 여러 필터 동시 실행
  • 핵심 행동: 여러 조건을 모두 만족하는 데이터만 조회
  • 실행 가이드:
  1. $and 배열 안에 각 조건을 객체로 나열
  2. 또는 객체 안에 여러 필드를 콤마로 구분
  • 성공 지표: 모든 조건을 만족하는 데이터만 표시됨
  • 예시/코드:
// 방법 1: $and 명시적 사용
{
  "$and": [
    {"original_url": {"$not": {"$regex": "tiktok\\.com", "$options": "i"}}},
    {"creator_ip": {"$ne": "192.168.219.1"}}
  ]
}

// 방법 2: 객체 내 다중 필드 (더 간단)
{
  "original_url": {"$not": {"$regex": "tiktok\\.com", "$options": "i"}},
  "creator_ip": {"$ne": "192.168.219.1"}
}

// 핵심 변화 설명
두 조건을 모두 만족하는 데이터만 표시됨
  • 주의사항: 조건이 많을수록 결과 데이터가 급격히 줄어들 수 있음


🧠 핵심 개념 해부

  • $ne (Not Equal): 정확한 제외
  • 5살에게 설명한다면: "이 장난감만 빼고 다 가져와"라고 하는 것
  • 실생활 예시: 전화번호부에서 특정 번호 하나만 삭제하기
  • 숨겨진 중요성: 데이터 타입까지 정확히 일치해야 함 (문자열 vs 숫자)
  • 오해와 진실: 오해(부분 일치도 제외) vs 진실(완전 일치만 제외)
  • $regex: 패턴 기반 필터링
  • 5살에게 설명한다면: "~이 들어간 모든 것들 빼고 가져와"라고 하는 것
  • 실생활 예시: 이메일에서 특정 도메인(@gmail.com) 모두 차단하기
  • 숨겨진 중요성: 정규식 성능이 데이터량에 따라 크게 달라짐
  • 오해와 진실: 오해(어려운 고급 기능) vs 진실(단순 패턴 매칭도 강력함)
  • $and vs 객체 필드: 조건 결합 방식
  • 5살에게 설명한다면: "빨간색이면서 동시에 둥근 것만 골라줘"
  • 실생활 예시: 온라인 쇼핑몰에서 가격대와 브랜드를 동시에 필터링
  • 숨겨진 중요성: 같은 필드에 여러 조건 적용 시에는 $and 필수
  • 오해와 진실: 오해(복잡해 보임) vs 진실(실제로는 매우 직관적)


🔮 미래 전략 및 지혜

  • 예방 전략:
  • 크롤링 시점에 불필요한 데이터 사전 필터링하여 DB 용량 절약
  • 정규식 패턴을 환경변수로 관리하여 유연한 필터링 규칙 적용
  • 인덱스 설정으로 쿼리 성능 최적화 (자주 필터링하는 필드에)
  • 장기적 고려사항: MongoDB 집계 파이프라인으로 더 복잡한 데이터 분석 가능
  • 전문가 사고방식: "데이터 품질이 분석 품질을 결정한다" - 필터링은 분석의 첫 단계
  • 학습 로드맵:
  1. 기본 쿼리 연산자 숙달
  2. 집계 파이프라인 학습
  3. 인덱스 최적화
  4. 복합 쿼리 패턴 마스터


🌟 실전 적용 청사진

  • 즉시 적용:
  • 현재 프로젝트에 정규식 기반 도메인 필터링 적용
  • 내부 IP 범위 전체 제외 패턴으로 확장 ($regex: "^192\\.168\\.|^10\\.")
  • 자주 사용하는 쿼리를 MongoDB Compass 즐겨찾기에 저장
  • 중기 프로젝트:
  • Python으로 동적 쿼리 생성기 개발 (클라이언트별 맞춤 필터링)
  • 크롤링 데이터 품질 자동 검증 시스템 구축
  • 도메인별 데이터 통계 대시보드 제작
  • 숙련도 점검:
  • 3가지 이상의 조건을 조합한 복잡한 쿼리 작성 가능 여부
  • 정규식 없이 $in, $nin으로 다중 값 처리 가능 여부
  • 집계 파이프라인으로 그룹화 및 통계 계산 가능 여부
  • 추가 리소스:
  • 초급: MongoDB University 무료 강의
  • 중급: MongoDB 공식 문서의 Query Operators 섹션
  • 고급: MongoDB Aggregation Framework 심화 학습



  • MongoDB 쿼리 최적화 컨설팅
  • 크롤링 데이터 전처리 자동화 솔루션 판매
  • 온라인 강의: "크롤러를 위한 MongoDB 마스터 클래스"


📝 지식 압축 요약

MongoDB 필터링의 황금법칙: $ne는 정확한 값 하나만, $regex는 패턴 전체를, 객체 다중 필드는 모든 조건을 동시에 만족하는 데이터만 남긴다. 크롤링 데이터의 품질이 곧 분석의 품질이며, 올바른 필터링은 클라이언트 만족도와 직결되는 핵심 기술이다.

목차
목차를 불러오는 중...

댓글

Loading...

댓글 로딩 중...

구글 검색