Computer >> 컴퓨터 >  >> 프로그래밍 >> MongoDB

MongoDB에서 BinData 서브타입별로 문서 조회하는 방법

MongoDB에서 BinData(Binary Data) 값을 저장할 때는 각 바이너리 데이터에 고유한 서브타입(subtype)이 함께 지정됩니다. 이 서브타입을 기준으로 문서를 조회하려면 subtype() 메서드를 활용하면 됩니다.

1. 테스트 컬렉션 생성하기

먼저 다양한 서브타입의 BinData 값을 가진 문서들을 삽입해 보겠습니다.

> db.demo249.insertOne({ "_id" : BinData(0,"AQAAAAEBAAVlbl9VSwAAAAAAAAhv") });
{
   "acknowledged" : true,
   "insertedId" : BinData(0,"AQAAAAEBAAVlbl9VSwAAAAAAAAhv")
}
> db.demo249.insertOne({"_id" : BinData(4,"CNDF66qIlCY92q1vFAAAAQ==")});
{
   "acknowledged" : true,
   "insertedId" : UUID("08d0c5eb-aa88-9426-3dda-ad6f14000001")
}
> db.demo249.insertOne({"_id" : BinData(3,"CNDF66qJ29g92q1vFAAAEw==")});
{
   "acknowledged" : true,
   "insertedId" : BinData(3,"CNDF66qJ29g92q1vFAAAEw==")
}

위 예제에서는 세 가지 서브타입을 사용했습니다. 참고로 주요 BinData 서브타입은 다음과 같습니다.

  • subtype 0: 일반(generic) 바이너리 데이터
  • subtype 3: 구버전 UUID(Legacy UUID)
  • subtype 4: 표준 UUID(RFC 4122)

2. 저장된 전체 문서 확인하기

find() 메서드를 사용해 컬렉션의 모든 문서를 출력합니다.

> db.demo249.find();

실행 결과는 다음과 같습니다.

{ "_id" : BinData(0,"AQAAAAEBAAVlbl9VSwAAAAAAAAhv") }
{ "_id" : UUID("08d0c5eb-aa88-9426-3dda-ad6f14000001") }
{ "_id" : BinData(3,"CNDF66qJ29g92q1vFAAAEw==") }

3. 서브타입으로 BinData 조회하기

이제 subtype() 메서드를 활용해 특정 서브타입을 가진 문서만 필터링해 보겠습니다. 아래 예제는 서브타입이 0인 BinData 문서만 조회하는 방법입니다.

> db.demo249.find(function(){ return this._id.subtype() == 0 });

실행 결과는 다음과 같습니다.

{ "_id" : BinData(0,"AQAAAAEBAAVlbl9VSwAAAAAAAAhv") }

이처럼 find() 내부에 자바스크립트 함수를 전달하고, this._id.subtype() 값과 원하는 서브타입 번호를 비교하면 해당 유형의 바이너리 데이터만 정확하게 추출할 수 있습니다. 같은 방식으로 조건의 숫자만 변경하면 subtype 3 또는 4(UUID) 문서도 손쉽게 조회할 수 있습니다.