Pymongo 컬렉션 선택 및 생성하기

Pymongo 컬렉션 선택 및 생성하기

Pymongo
Pymongo 컬렉션 선택 및 생성하기
Author

gabriel yang

Published

September 28, 2024


MongoDB는 비정형 데이터를 저장하기에 좋은 NoSQL 데이터베이스로, Python에서는 pymongo라는 라이브러리를 사용하여 간편하게 MongoDB와 상호작용할 수 있습니다. 이번 글에서는 pymongo를 사용하여 MongoDB의 컬렉션을 선택하고, 새로운 컬렉션을 생성하는 방법을 알아보겠습니다.

1. PyMongo 설치 및 기본 설정

먼저 PyMongo를 설치해야 합니다. 터미널에서 다음 명령어를 실행하세요:

pip install pymongo

설치가 완료되면, MongoDB 서버와 연결하기 위한 코드를 작성할 수 있습니다.

MongoDB localhost에 연결

from pymongo import MongoClient

# MongoDB 서버에 연결 (로컬호스트를 사용한 예)
client = MongoClient('mongodb://localhost:27017/')

위 코드에서 MongoClient를 사용하여 MongoDB 서버와 연결합니다. localhost는 로컬에서 실행 중인 MongoDB 서버를 의미하며, 기본 포트인 27017을 사용합니다. 만약 원격 서버에 연결하려면 해당 서버의 IP 주소와 포트를 사용하면 됩니다.

MongoDB Atlas에 연결

MongoDB Atlas는 클라우드 기반의 MongoDB 서비스로, 다음과 같이 연결 문자열을 설정하여 사용할 수 있습니다:

from pymongo import MongoClient

# MongoDB Atlas 연결
client = MongoClient("mongodb+srv://<username>:<password>@cluster0.mongodb.net/mydatabase?retryWrites=true&w=majority")
Note

주의: <username>, <password>, <dbname>은 사용자의 MongoDB Atlas 계정에 맞게 수정해야 합니다.

2. 데이터베이스와 컬렉션 선택

MongoDB는 계층 구조로 되어 있습니다. 먼저 사용할 데이터베이스를 선택한 후, 해당 데이터베이스 내에서 컬렉션을 선택합니다.

다음 코드는 testdb라는 데이터베이스와 users라는 컬렉션을 선택하는 예시입니다.

# 데이터베이스 선택
db = client['testdb']

# 컬렉션 선택
collection = db['users']
  • client['testdb']: testdb라는 이름의 데이터베이스를 선택합니다. 만약 해당 데이터베이스가 없다면 자동으로 생성됩니다.
  • db['users']: users라는 컬렉션을 선택합니다. 마찬가지로 컬렉션이 존재하지 않으면 MongoDB는 이를 자동으로 생성합니다.

3. 새로운 컬렉션 생성하기

MongoDB에서는 명시적으로 컬렉션을 생성하지 않아도, 데이터를 삽입하면 자동으로 컬렉션이 생성됩니다. 하지만 컬렉션을 미리 생성해야 하거나, 인덱스와 같은 추가 설정이 필요하다면 명시적으로 컬렉션을 만들 수 있습니다.

다음 코드는 새로운 컬렉션을 생성하는 방법을 보여줍니다.

# 새로운 컬렉션 생성
db.create_collection('products')

위 코드는 products라는 이름의 컬렉션을 생성합니다. 단, 이미 해당 이름의 컬렉션이 있을 경우 오류가 발생하므로 주의해야 합니다.

Note

Tip: create_collection()을 사용할 필요 없이, 대부분의 경우 데이터를 삽입할 때 MongoDB가 자동으로 컬렉션을 생성해줍니다.

4. 컬렉션에 데이터 삽입

이제 새로 생성한 컬렉션에 데이터를 삽입해 보겠습니다.

# 단일 문서 삽입
data = {"name": "Alice", "age": 30}
collection.insert_one(data)

# 여러 문서 삽입
multiple_data = [
    {"name": "Bob", "age": 25},
    {"name": "Charlie", "age": 35}
]
collection.insert_many(multiple_data)
InsertManyResult([ObjectId('66f808748933c113822e4b7b'), ObjectId('66f808748933c113822e4b7c')], acknowledged=True)

insert_one()은 단일 문서를, insert_many()는 여러 문서를 컬렉션에 삽입합니다.

5. 컬렉션 조회 및 삭제

컬렉션 목록을 확인하거나, 불필요한 컬렉션을 삭제할 수도 있습니다.

# 모든 컬렉션 목록 조회
collections = db.list_collection_names()
print(collections)

# 특정 컬렉션 삭제
db.drop_collection('products')
['users', 'products']

{'nIndexesWas': 1,
 'ns': 'testdb.products',
 'ok': 1.0,
 '$clusterTime': {'clusterTime': Timestamp(1727531119, 10),
  'signature': {'hash': b'\xd8;\xf0\x8c\xe3\xa5 \x0b\xb8M\x1c\xc4T=\x08\xcf\n\xa9\xec\xe4',
   'keyId': 7377426399050596418}},
 'operationTime': Timestamp(1727531119, 10)}
  • list_collection_names(): 데이터베이스 내에 있는 모든 컬렉션의 이름을 리스트로 반환합니다.
  • drop_collection(): 지정한 컬렉션을 삭제합니다.