PyMongo 데이터 삭제
PyMongo 데이터 삭제
MongoDB는 유연한 비정형(NoSQL) 데이터베이스로, 문서를 자유롭게 추가하고 수정할 수 있습니다. PyMongo는 MongoDB와 Python 간의 연결을 지원하며, 이를 통해 쉽게 데이터를 업데이트할 수 있습니다.
이 글에서는 PyMongo에서 update_one()
과 update_many()
메서드를 사용하여 문서를 수정하는 방법을 설명하겠습니다.
1. PyMongo 설치 및 기본 설정
먼저 PyMongo를 설치해야 합니다. 터미널에서 다음 명령어를 실행하세요:
pip install pymongo
설치가 완료되면, MongoDB 서버와 연결하기 위한 코드를 작성할 수 있습니다.
MongoDB localhost에 연결
from pymongo import MongoClient
# MongoDB 서버에 연결 (로컬호스트를 사용한 예)
= MongoClient('mongodb://localhost:27017/') client
위 코드에서 MongoClient
를 사용하여 MongoDB 서버와 연결합니다. localhost
는 로컬에서 실행 중인 MongoDB 서버를 의미하며, 기본 포트인 27017
을 사용합니다. 만약 원격 서버에 연결하려면 해당 서버의 IP 주소와 포트를 사용하면 됩니다.
MongoDB Atlas에 연결
MongoDB Atlas는 클라우드 기반의 MongoDB 서비스로, 다음과 같이 연결 문자열을 설정하여 사용할 수 있습니다:
from pymongo import MongoClient
# MongoDB Atlas 연결
= MongoClient("mongodb+srv://<username>:<password>@cluster0.mongodb.net/mydatabase?retryWrites=true&w=majority") client
주의: <username>
, <password>
, <dbname>
은 사용자의 MongoDB Atlas 계정에 맞게 수정해야 합니다.
from pymongo import MongoClient
# 데이터베이스 선택
= client['testdb']
db
# 컬렉션 선택
= db['users']
collection
# # 새로 생성된 문서만 출력되도록 collection에 저장된 문서를 모두 삭제
collection.delete_many({})
# 테스트용 문서 목록
= [
userdata "name": "Alice", "age": 30, "email": "alice@example.com"},
{"name": "Bob", "age": 25, "email": "bob@example.com"},
{"name": "Charlie", "age": 35, "email": "charlie@example.com"},
{"name": "Daisy", "age": 28, "email": "daisy@example.com"},
{"name": "Eve", "age": 40, "email": "eve@example.com"},
{"name": "Frank", "age": 22}, # email 필드 없음
{"name": "Grace", "age": 50, "email": "grace@example.com"},
{"name": "Hank", "age": 20, "email": "hank@example.com"},
{
]
# 여러 문서 삽입
= collection.insert_many(userdata)
result
# 전체 문서 조회
= collection.find({})
updated_documents for document in updated_documents:
print(document)
출력
{'_id': ObjectId('66f87b2c4efbafb3dc09140a'), 'name': 'Alice', 'age': 30, 'email': 'alice@example.com'}
{'_id': ObjectId('66f87b2c4efbafb3dc09140b'), 'name': 'Bob', 'age': 25, 'email': 'bob@example.com'}
{'_id': ObjectId('66f87b2c4efbafb3dc09140c'), 'name': 'Charlie', 'age': 35, 'email': 'charlie@example.com'}
{'_id': ObjectId('66f87b2c4efbafb3dc09140d'), 'name': 'Daisy', 'age': 28, 'email': 'daisy@example.com'}
{'_id': ObjectId('66f87b2c4efbafb3dc09140e'), 'name': 'Eve', 'age': 40, 'email': 'eve@example.com'}
{'_id': ObjectId('66f87b2c4efbafb3dc09140f'), 'name': 'Frank', 'age': 22}
{'_id': ObjectId('66f87b2c4efbafb3dc091410'), 'name': 'Grace', 'age': 50, 'email': 'grace@example.com'}
{'_id': ObjectId('66f87b2c4efbafb3dc091411'), 'name': 'Hank', 'age': 20, 'email': 'hank@example.com'}
위 코드를 통해 MongoDB 서버에 연결하고, testdb 데이터베이스와 users 컬렉션을 선택했습니다. 컬렉션이 존재하지 않는다면 MongoDB는 데이터를 삽입할 때 자동으로 컬렉션을 생성합니다.
2. delete_one()
을 사용하여 단일 문서 삭제
MongoDB의 delete_one()
메서드는 조건에 맞는 첫 번째 문서 하나만 삭제합니다. 예를 들어, name
이 “Bob”인 사용자를 삭제하려면 다음과 같이 작성할 수 있습니다.
예시: delete_one()
사용
= collection.delete_one({"name": "Bob"})
result print(f"Deleted {result.deleted_count} document(s)")
# 전체 문서 조회
= collection.find({})
updated_documents for document in updated_documents:
print(document)
출력
Deleted 1 document(s)
{'_id': ObjectId('66f8e920a05d9504be2e3847'), 'name': 'Alice', 'age': 30, 'email': 'alice@example.com'}
{'_id': ObjectId('66f8e920a05d9504be2e3849'), 'name': 'Charlie', 'age': 35, 'email': 'charlie@example.com'}
{'_id': ObjectId('66f8e920a05d9504be2e384a'), 'name': 'Daisy', 'age': 28, 'email': 'daisy@example.com'}
{'_id': ObjectId('66f8e920a05d9504be2e384b'), 'name': 'Eve', 'age': 40, 'email': 'eve@example.com'}
{'_id': ObjectId('66f8e920a05d9504be2e384c'), 'name': 'Frank', 'age': 22}
{'_id': ObjectId('66f8e920a05d9504be2e384d'), 'name': 'Grace', 'age': 50, 'email': 'grace@example.com'}
{'_id': ObjectId('66f8e920a05d9504be2e384e'), 'name': 'Hank', 'age': 20, 'email': 'hank@example.com'}
- 이 코드는
name
필드가 “Bob”인 첫 번째 문서를 삭제합니다. 결과로 삭제된 문서의 개수는deleted_count
속성에서 확인할 수 있습니다.
3. delete_many()
를 사용하여 여러 문서 삭제
delete_many()
메서드는 조건에 맞는 모든 문서를 삭제합니다. 예를 들어, 나이가 30 이상인 모든 사용자를 삭제하려면 다음과 같이 작성할 수 있습니다.
예시: delete_many()
사용
= collection.delete_many({"age": {"$gte": 30}})
result print(f"Deleted {result.deleted_count} document(s)")
# 전체 문서 조회
= collection.find({})
updated_documents for document in updated_documents:
print(document)
출력
Deleted 4 document(s)
{'_id': ObjectId('66f8e920a05d9504be2e384a'), 'name': 'Daisy', 'age': 28, 'email': 'daisy@example.com'}
{'_id': ObjectId('66f8e920a05d9504be2e384c'), 'name': 'Frank', 'age': 22}
{'_id': ObjectId('66f8e920a05d9504be2e384e'), 'name': 'Hank', 'age': 20, 'email': 'hank@example.com'}
- 여기서는
age
필드가 30 이상인 모든 문서가 삭제됩니다. 조건에 맞는 모든 문서를 삭제하므로, 데이터베이스에 많은 문서가 있을 때는 주의해서 사용해야 합니다.
4. 조건 없는 모든 문서 삭제
특정 조건 없이 컬렉션의 모든 문서를 삭제하려면 빈 필터를 사용할 수 있습니다. 이는 전체 데이터베이스를 리셋하는 데 유용합니다.
= collection.delete_many({})
result print(f"Deleted {result.deleted_count} document(s)")
출력
Deleted 3 document(s)
이 코드는 컬렉션의 모든 문서를 삭제합니다. 데이터베이스에서 데이터를 전부 지우려면 이 방법을 사용할 수 있습니다.
5. 삭제 후 데이터 확인
삭제 후 컬렉션에 남은 데이터를 확인하여 삭제 작업이 제대로 이루어졌는지 확인할 수 있습니다.
예시: 남은 문서 확인
= collection.find()
remaining_docs for doc in remaining_docs:
print(doc)
이 코드는 컬렉션에 남은 모든 문서를 출력합니다.
delete_one()
메서드를 사용하면 하나의 문서를 삭제할 수 있고, delete_many()
메서드는 조건에 맞는 모든 문서를 삭제하는 데 사용됩니다.
MongoDB에서 데이터를 삭제할 때는 신중하게 조건을 설정해야 합니다. 특히 여러 문서를 삭제할 때는 데이터 유실을 방지하기 위해 반드시 데이터를 백업하는 것이 중요합니다.