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
반응형
'공부기록 > 파이썬' 카테고리의 다른 글
[Flask] 이미지 반환하는 라우터(url 호출시 이미지 반환하는 방법) (0) | 2023.07.13 |
---|---|
[Flask] MongoDB에서 TypeError 문제(_id) (0) | 2023.07.04 |
[Flask] 직렬화 오류 (0) | 2023.07.03 |
[Flask] Blueprint로 라우터 관리하기 (0) | 2023.07.03 |
[Python + Flask + MongoDB] REST API 구축하기 (0) | 2023.07.03 |