본문 바로가기
공부기록/파이썬

[Python, MongoDB] 중복 문서 제외하고 Insert 하는 방법

by 책읽는 개발자 ami 2023. 7. 14.
728x90
반응형

Python에서 중복 문서 제외하고 Insert 하는 방법

- 문서를 한 번에 삽입

python에서 MongoDB를 사용할 때 문서를 한 번에 삽입하는 코드는 아래와 같다. 

이때 반드시 pip instal pymongo 를 통해 pymongo 라이브러리가 설치되어 있어야 한다.

from pymongo import MongoClient

# MongoDB에 연결
client = MongoClient('mongodb://localhost:27017')

# 데이터베이스 선택
db = client.mydb

# 컬렉션 선택
collection = db.mycollection

# 삽입할 문서들
documents = [
    {"name": "Alice", "age": 25},
    {"name": "Bob", "age": 30},
    {"name": "Charlie", "age": 35},
    {"name": "Alice", "age": 25}
]

# 문서들을 한 번에 삽입
result = collection.insert_many(documents)

# 삽입된 문서들의 ID 확인
print(result.inserted_ids)

위 코드에서 name: Alice가 중복된다. 이때 Alice는 한 번만 삽입하고 나머지 문서들도 삽입하려면 어떻게 할까?

- 중복된 문서를 제외하고 삽입하는 방법

아래 코드를 보면, collection에서 4개의 문서를 insert_many로 삽입할 때, 4번째 문서는 name: Alice 라는 중복된 필드를 가지고 있지만, ordered=False 옵션으로 인해 중복된 문서는 건너뛰고 삽입할 수 있다.

from pymongo import MongoClient

# MongoDB에 연결
client = MongoClient('mongodb://localhost:27017')

# 데이터베이스 선택
db = client.mydb

# 컬렉션 선택
collection = db.mycollection

# 삽입할 문서들
documents = [
    {"name": "Alice", "age": 25},
    {"name": "Bob", "age": 30},
    {"name": "Charlie", "age": 35},
    {"name": "Alice", "age": 40}
]

# 중복된 문서는 건너뛰고 삽입
result = collection.insert_many(documents, ordered=False)

# 삽입된 문서들의 ID 확인
print(result.inserted_ids)

하지만 이 코드가 동작하기 위해선 아래의 작업이 선행되어야 한다.

바로 name 필드에 대해 고유 인덱스를 만들어 주는 것이다.

mongodb에서 직접 쿼리를 날려 생성할 수도 있고 python을 통해 생성할 수도 있다.

하지만 인덱스는 한 번만 생성되기만 하면 되므로 직접 쿼리로 생성할 것을 추천한다.

고유 인덱스 생성 방법은 아래 글을 확인해 주세요!

2023.07.14 - [공부기록/여러가지] - [MongoDB] 중복 문서 제외하고 bulkWrite하기 (createIndex 사용)

728x90
반응형