MongoDBv3
New in version 3.0.
드라이버 단축 이름
MongoDBv3
빌드 의존성
MongoDB C++ 3.4.0 이상 버전 클라이언트 라이브러리
MongoDBv3 드라이버는 MongoDB 서비스에 접속할 수 있습니다.
이 드라이버는 문서/객체 및 집합/레이어의 읽기, 생성, 업데이트 및 삭제 작업을 지원합니다. OGR 작업 전에 MongoDB 데이터베이스가 이미 존재해야만 합니다.
이 드라이버는 Mongo C++ 3.4.0 이상 버전 클라이언트 라이브러리를 필요로 합니다.
드라이버 케이퍼빌리티
Create() 지원
이 드라이버는 GDALDriver::Create()
작업을 지원합니다.
지리참조 작업 지원
이 드라이버는 지리참조 작업을 지원합니다.
VirtualIO 지원
이 드라이버는 virtual I/O operations (/vsimem/, etc.) 를 지원합니다.
MongoDB 대 OGR 개념
데이터베이스 안에 있는 MongoDB 집합(collection)을 OGR 레이어로 간주합니다. MongoDB 문서는 OGR 객체로 간주합니다.
데이터셋 이름 문법
데이터셋을 열 수 있는 주요 문법이 2개 있습니다:
MONGODBV3: 접두어가 붙은 MongoDB URI 를 사용하는 방법입니다.
MONGODBV3:mongodb://[usr:pwd@]host1[:port1]...[,hostN[:portN]]][/[db][?options]]
MongoDBv3: 만 이름으로 사용하고 호스트명, 포트 번호, 사용자명, 비밀번호, 데이터베이스 등등은 열기 옵션으로 지정하는 방법입니다.
주의: 레거시 MongoDB 드라이버 대신 이 드라이버가 데이터셋을 인식하기 위해서는 mongodb:// 로 시작하는 URI 앞에 MONGODBV3: 접두어를 붙여야 합니다. URI가 mongodb+srv:// 로 시작하는 경우 접두어가 필요없습니다.
다음 열기 옵션들을 사용할 수 있습니다:
URI=uri: 연결 URI
HOST=hostname: 서버 호스트명을 지정합니다. 기본값은 ‘localhost’입니다.
PORT=port: 서버 포트 번호를 지정합니다. 기본값은 27017입니다.
DBNAME=dbname: 데이터베이스 이름을 지정합니다. 호스트 접속 시 사용자 인증 정보와 함께 지정해야 합니다.
USER=name: 사용자명을 지정합니다.
PASSWORD=password: 사용자 비밀번호를 지정합니다.
SSL_PEM_KEY_FILE=filename: SSL PEM 인증서/키 파일명을 지정합니다.
SSL_PEM_KEY_PASSWORD=password: SSL PEM 키 비밀번호를 지정합니다.
SSL_CA_FILE=filename: SSL 인증서 기관(Certification Authority) 파일명을 지정합니다.
SSL_CRL_FILE=filename: SSL 인증서 폐기 목록(Certification Revocation List) 파일명을 지정합니다.
SSL_ALLOW_INVALID_CERTIFICATES=YES/NO: 무결하지 않은 인증서로 서버 접속을 허용할지 여부를 선택합니다. 기본값은 NO입니다.
BATCH_SIZE=number: 배치(batch) 당 가져올 객체 개수를 지정합니다. 대부분의 쿼리에서, 첫 번째 배치가 문서 101개 또는 1MB를 초과하기에 딱 적당한 개수의 문서를 반환합니다. 이어지는 배치 용량은 4MB입니다.
FEATURE_COUNT_TO_ESTABLISH_FEATURE_DEFN=number: 객체 정의를 확립하기 위해 가져와야 할 객체의 개수를 지정합니다. -1로 설정하면 무제한이라는 의미입니다. 기본값은 100입니다.
JSON_FIELD=YES/NO: 전체 문서를 JSON으로 가지고 있는 “_json” 필드를 포함할지 여부를 선택합니다. 기본값은 NO입니다.
FLATTEN_NESTED_ATTRIBUTE=YES/NO: 내포 객체들을 재귀적으로 탐색해서 평탄화된 OGR 속성을 생성할지 여부를 선택합니다. 기본값은 YES입니다.
FID=name: FID로 사용할 정수형 값들을 가진 필드의 이름을 지정합니다. 기본값은 ‘ogc_fid’입니다.
USE_OGR_METADATA=YES/NO: 레이어 메타데이터를 읽어오기 위해 _ogr_metadata 집합을 사용할지 여부를 선택합니다. 기본값은 YES입니다.
BULK_INSERT=YES/NO: 객체 생성을 위해 벌크(bulk) 삽입을 사용할지 여부를 선택합니다. 기본값은 YES입니다.
필터링
이 드라이버는 도형 필드에서 서버에 “2d” 또는 “2dsphere” 공간 색인을 사용할 수 있을 경우 SetSpatialFilter()로 설정된 모든 공간 필터를 포워딩할 것입니다.
하지만 현재로서는 SetAttributeFilter()로 설정된 SQL 속성 필터를 클라이언트 쪽에서만 평가합니다. 서버 쪽 필터링을 활성화하려면 SetAttributeFilter()에 전송되는 문자열이 MongoDB 필터 문법 으로 된 JSon 객체여야만 합니다.
페이지 작업
서버로부터 객체를 문서 101개 또는 1MB를 초과하기에 딱 적당한 개수의 문서 덩어리로 가져옵니다. 이어지는 배치 용량은 4MB입니다. BATCH_SIZE 열기 옵션을 이용해서 이 습성을 변경할 수 있습니다.
스키마
MongoDB 집합을 읽어올 때, OGR가 속성 및 도형 필드의 스키마를 확립해야만 합니다. OGR는 스키마를 사용하지 않는 MongoDB 집합과는 반대로 고정 스키마 개념을 가지기 때문입니다.
일반적인 경우, OGR는 집합의 처음 문서 100개를 (FEATURE_COUNT_TO_ESTABLISH_FEATURE_DEFN 열기 옵션으로 이 개수를 변경할 수 있습니다.) 읽어와서 가져온 필드와 값에 가장 적합한 스키마를 작성할 것입니다.
이전에 OGR로 생성한 집합/레이어의 경우, _ogr_metadata 특수 집합이 OGR 스키마를 담고 있습니다. 이 경우 해당 OGR 스키마를 직접 사용할 것입니다. USE_OGR_METADATA 열기 옵션을 NO로 설정해서 _ogr_metadata에 작성된 스키마를 무시할 수도 있습니다.
JSON_FIELD 열기 옵션을 YES로 설정하면 OGR 스키마에 _json 특수 필드도 추가할 수 있습니다. MongoDB 문서를 OGR 객체로 읽어올 때, _json 필드에 문서 전체의 JSon 버전을 저장할 것입니다. 복잡 문서 또는 OGR 데이터 유형으로 잘 변환되지 않는 데이터 유형의 경우 유용할 수도 있습니다. 문서 생성/업데이트 작업 시, _json 필드가 존재하고 설정되어 있는 경우 그 내용을 직접 사용할 것입니다. (다른 필드들은 무시할 것입니다.)
객체 ID (FID)
MongoDB는 문서의 유일 ID를 담고 있는 _id 특수 필드를 가지고 있습니다. 이 필드는 OGR 필드로 반환되지만, 반드시 정수형이어야만 하는 OGR FeatureID 특수 필드로 사용할 수는 없습니다. OGR는 기본적으로 OGR FeatureID를 설정하기 위해, 존재할 수도 있는 ‘ogc_fid’ 필드를 읽어오려 시도할 것입니다. FID 열기 옵션으로 검색할 필드의 이름을 설정할 수 있습니다. 이 필드를 발견하지 못 하는 경우, OGR가 FID를 1에서 시작하는 일련 번호로 반환하지만 안정적일 것이라고 보장할 수는 없습니다.
ExecuteSQL() 인터페이스
“MongoDB”를 ExecuteSQL()의 방언으로 지정하면, 직렬화된 MongoDB 명령어 를 가진 JSon 문자열을 전송할 수 있습니다. 결과물은 단일 OGR 객체에 있는 JSon 문자열로 반환될 것입니다.
표준 SQL 요청은 클라이언트 쪽에서 실행될 것입니다.
쓰기 지원
레이어/집합을 생성하고 삭제할 수 있습니다.
데이터소스를 업데이트 모드로 연 경우에만 쓰기 지원이 활성화됩니다.
OGRFeature::CreateFeature()
함수로 새 객체를 삽입할 때 명령어가 성공적으로 실행되었다면, OGR이 반환된 _id를 가져와서 OGRFeature::SetFeature()
작업을 위해 사용할 것입니다.
레이어 생성 옵션
다음과 같은 레이어 생성 옵션들을 지원합니다:
OVERWRITE=YES/NO: 기존 집합을 생성할 레이어 이름으로 덮어쓸지 여부를 선택합니다. 기본값은 NO입니다.
GEOMETRY_NAME=name: 도형 열의 이름입니다. 기본값은 ‘geometry’입니다.
SPATIAL_INDEX=YES/NO: 공간 색인(2dsphere)을 생성할지 여부를 선택합니다. 기본값은 YES입니다.
FID=string: FID로 사용할 정수값을 가진 필드의 이름입니다. 기본값은 ‘ogc_fid’입니다.
WRITE_OGR_METADATA=YES/NO: _ogr_metadata 집합에 레이어 필드의 설명을 생성할지 여부를 선택합니다. 기본값은 YES입니다.
DOT_AS_NESTED_FIELD=YES/NO: 필드 이름에 있는 점(‘.’) 문자를 하위 문서(sub-document)로 간주할지 여부를 선택합니다. 기본값은 YES입니다.
IGNORE_SOURCE_ID=YES/NO: CreateFeature() 함수로 전송되는 객체의 _id 필드를 무시할지 여부를 선택합니다. 기본값은 NO입니다.
예시
MongoDB 데이터베이스의 테이블을 목록화하기:
ogrinfo -ro mongodb+srv://user:password@cluster0-ox9uy.mongodb.net/test
MongoDB 필드에 대한 필터링:
ogrinfo -ro mongodb+srv://user:password@cluster0-ox9uy.mongodb.net/test -where '{ "field": 5 }'
shapefile로부터 집합을 생성하고 채우기:
ogr2ogr -update mongodb+srv://user:password@cluster0-ox9uy.mongodb.net/test shapefile.shp
빌드 지침
MongoDBv3 드라이버를 컴파일 하려면 GDAL/OGR를 MongoDB 3.4.0 이상 버전 C++ 드라이버 클라이언트 라이브러리 를 대상으로 빌드해야만 합니다.
먼저 MongoDB C++ 드라이버 클라이언트 빌드 지침 을 따르십시오.
그 다음:
리눅스/유닉스의 경우,
./configure --with-mongocxxv3
를 실행하십시오. (PKG_CONFIG_PATH가{INSTALLATION_PREFIX_OF_MONGOCXX}/lib/pkgconfig
을 가리키도록 대체해야 할 수도 있습니다.)윈도우의 경우, nmake.opt 파일에서 다음 내용의 주석 처리를 해제하고 수정하십시오. (또는 nmake.local 파일에 추가하십시오.):
# Uncomment for MongoDBv3 support # Uncomment following line if plugin is preferred #MONGODBV3_PLUGIN = YES BOOST_INC=E:/boost_1_69_0 MONGOCXXV3_CFLAGS = -IE:/dev/install-mongocxx-3.4.0/include/mongocxx/v_noabi -IE:/dev/install-mongocxx-3.4.0/include/bsoncxx/v_noabi MONGOCXXV3_LIBS = E:/dev/install-mongocxx-3.4.0/lib/mongocxx.lib E:/dev/install-mongocxx-3.4.0/lib/bsoncxx.lib