개요
이 가이드 에서는 PyMongo 사용하여 BSON 문서를 만들고, 파일 에서 BSON 읽고, 파일 에 BSON 쓰기 (write) 방법을 학습 수 있습니다.
BSON 또는 바이너리 JSON 은 MongoDB 데이터를 구성하고 저장 데 사용하는 데이터 형식입니다. 이 데이터 형식은 모든 JSON 데이터 구조 유형을 포함하며 날짜, 다양한 크기의 정수, ObjectId 및 바이너리 데이터를 포함한 유형에 대한 지원 추가합니다. BSON 패키지 포함하여 Python 애플리케이션 에서 BSON 문서를 사용할 수 있습니다. 지원되는 유형의 전체 목록은 BSON types 서버 매뉴얼 페이지를 참조하세요.
BSON 문서는 MongoDB 컬렉션에 바이너리 형식으로 저장되는 반면, PyMongo BSON 문서를 Python 사전으로 나타냅니다. PyMongo Python 사전을 컬렉션 에 삽입할 때 자동으로 BSON 문서로 변환합니다. 마찬가지로, 컬렉션 에서 문서 조회 때 PyMongo BSON 문서 Python 사전으로 다시 변환합니다.
다음 예시 사전과 BSON 형식의 문서 모두 보여줍니다. Dictionary 또는 BSON 탭 사용하여 해당 형식을 확인합니다.
{"hello": "world"}
\x16\x00\x00\x00 # total document size \x02 # 0x02 = type String hello\x00 # field name \x06\x00\x00\x00world\x00 # field value \x00 # 0x00 = type EOO ("end of object")
샘플 데이터
이 가이드의 코드 샘플에서는 다음 BSON 문서를 예로 사용합니다.
{ "address" : { "street" : "Pizza St", "zipcode" : "10003" }, "coord" : [-73.982419, 41.579505] "cuisine" : "Pizza", "name" : "Mongo's Pizza" }
BSON 문서 만들기
Python 에서 사전을 만들 때 사용하는 것과 동일한 표기법을 사용하여 BSON 문서 만들 수 있습니다. 다음 예시 앞의 샘플 BSON 문서 나타내는 BSON 문서 만듭니다.
document = { "address": { "street": "Pizza St", "zipcode": "10003" }, "coord": [-73.982419, 41.579505], "cuisine": "Pizza", "name": "Mongo's Pizza" }
BSON 문서 변경
Python 에서 사전을 수정하는 데 사용하는 것과 동일한 표기법을 사용하여 BSON 문서 의 내용을 수정할 수 있습니다. 다음 예시 샘플 BSON 문서 를 세 가지 변경합니다.
값이
12345
인 새 필드restaurant_id
을 추가합니다.cuisine
필드 제거name
필드의 값을"Mongo's Pizza Place"
로 설정합니다.
document["restaurant_id"] = 12345 del document["cuisine"] document["name"] = "Mongo's Pizza Place"
파일에 BSON 쓰기
BSON 데이터를 파일 에 쓰기 (write) 려면 출력 파일 에서 바이너리 쓰기 모드 로 파일 스트림 엽니다. 그런 다음 각 문서 출력 파일 에 쓰기 (write) . bson.encode()
메서드를 사용하여 문서가 BSON 형식으로 인코딩되었는지 확인합니다.
다음 예시 샘플 BSON 문서 file.bson
에 씁니다.
with open("file.bson", "w") as file: file.write(bson.encode(document))
파일에서 BSON 읽기
파일 에서 BSON 문서를 읽으려면 입력 파일 에서 바이너리 읽기 모드 로 파일 스트림 엽니다. 그런 다음 bson.decode()
메서드를 사용하여 BSON 형식의 문서를 읽을 때 디코딩합니다.
다음 예시 file.bson
에서 샘플 BSON 문서 읽습니다.
with open("file.bson", "rb") as file: data = file.read() document = bson.decode(data) print(document)
{"address": {"street": "Pizza St", "zipcode": "10003"}, "coord": [-73.982419, 41.579505], "cuisine": "Pizza", "name": "Mongo's Pizza"}
원시 BSON 데이터로 작업
PyMongo 원시 BSON 문서 사용을 지원합니다. 다음 목록에는 원시 BSON 문서를 사용해야 할 수 있는 몇 가지 상황이 포함되어 있습니다.
데이터베이스 또는 컬렉션 간 문서 이동
디스크에 바이너리 데이터 쓰기
Python 사전과의 변환에 따른 성능 오버헤드
RawBSONDocument
클래스는 기본 원시 BSON 바이트에 대한 액세스 제공하는 BSON 문서 를 나타냅니다. RawBSONDocument
객체를 사용하여 컬렉션 의 문서를 나타내려면 MongoClient
생성자의 document_class
매개 변수를 RawBSONDocument
로 설정하다 .
참고
RawBSONDocument
객체는 읽기 전용입니다. RawBSONDocument
를 수정하려면 먼저 Python 사전으로 변환해야 합니다.
다음 예시 RawBSONDocument
객체를 사용하여 컬렉션 모델링하도록 MongoClient
객체 구성한 다음 이전 예시에서 샘플 문서 검색합니다. Synchronous 또는 Asynchronous 탭 선택하여 해당 코드를 확인합니다.
from bson.raw_bson import RawBSONDocument client = pymongo.MongoClient("<connection URI>", document_class=RawBSONDocument) collection = client.sample_restaurants.restaurants raw_doc = collection.find_one({"name": "Mongo's Pizza"}) print(type(raw_doc))
<class 'bson.raw_bson.RawBSONDocument'>
from bson.raw_bson import RawBSONDocument client = pymongo.AsyncMongoClient("<connection URI>", document_class=RawBSONDocument) collection = client.sample_restaurants.restaurants raw_doc = await collection.find_one({"name": "Mongo's Pizza"}) print(type(raw_doc))
<class 'bson.raw_bson.RawBSONDocument'>
API 문서
이 가이드 에 설명된 메서드 또는 유형에 대해 자세히 학습 BSON API 설명서를 참조하세요.