MongoDBv3
3.0 新版功能.
司机简称
MongoDBv3
生成依赖项
Mongo CXX>=3.4.0客户端库
此驱动程序可以连接到a MongoDB服务。
驱动程序支持文档/功能和集合/层的读取、创建、更新和删除操作。MongoDB数据库必须存在,然后才能使用OGR对其进行操作。
这个驱动程序需要MangGDB C++ V3.4.0客户端库。
驱动程序功能
Supports Create()
This driver supports the GDALDriver::Create()
operation
Supports Georeferencing
This driver supports georeferencing
Supports VirtualIO
This driver supports virtual I/O operations (/vsimem/, etc.)
MongoDB与OGR概念
数据库中的MongoDB集合被视为OGR层。MongoDB文档被视为OGR特性。
数据集名称语法
有两种可能的语法:
一次使用 MongoDB URI 前缀 MONGODBV3: ,例如MONGODBV3:mongodb:// [usr:pwd公司@] 主机1 [:端口1] … [,主机号[:端口号] ] ] [/[db] [?选项] ]
一个只使用MongoDBv3:作为名称和打开选项来指定主机、端口、用户、密码、数据库等。。。
Note: the MONGODBV3: prefix before a URI starting with mongodb:// is required to make it recognize by this driver, instead of the legacy driver. If the URI is starting with mongodb+srv://, then it is not needed.
可用的打开选项有:
URI =uri: Connection URI
HOST =主机名:服务器主机名。默认为本地主机。
PORT =端口。服务器端口。默认值为27017。
DBNAME =数据库名称。数据库名称。应在连接到启用了用户身份验证的主机时指定。
USER =姓名。用户名。
PASSWORD =密码。用户密码。
SSL_PEM_KEY_FILE =文件名。SSL PEM证书/密钥文件名。
SSL_PEM_KEY_PASSWORD =密码。SSL PEM密钥密码。
SSL_CA_FILE =文件名。SSL证书颁发机构文件名。
SSL_CRL_FILE =文件名。SSL证书吊销列表文件名。
SSL_ALLOW_INVALID_CERTIFICATES =是/否。是否允许连接到证书无效的服务器。默认为否。
BATCH_SIZE =数字。每批要检索的功能数。对于大多数查询,第一批返回101个文档,或者只返回足够超过1兆字节的文档。后续批处理大小为4兆字节。
FEATURE_COUNT_TO_ESTABLISH_FEATURE_DEFN =数字。要检索以建立特征定义的特征数。-1=无限制。默认为100。
JSON_FIELD =是/否。是否将名为“_json”的字段作为json包含在完整文档中。默认为否。
FLATTEN_NESTED_ATTRIBUTE =是/否。是否递归地探索嵌套对象并生成扁平OGR属性。默认为“是”。
FID =姓名。要用作FID的带整数值的字段名。默认为ogc_fid。
USE_OGR_METADATA =是/否。是否使用u ogru元数据集合读取层元数据。默认为“是”。
BULK_INSERT =是/否。是否使用批量插入创建特征。默认为“是”。
过滤
当“2d”或“2dsphere”空间索引在geometry字段上可用时,驱动程序将使用set spatial filter()将任何空间过滤器集转发到服务器。
但是,在当前状态下,使用SetAttributeFilter()设置的SQL属性筛选器仅在客户端求值。要启用服务器端筛选,传递给SetAttributeFilter()的字符串必须是 MongoDB filter syntax .
分页
从服务器上检索的功能由101个文档块或刚好足够超过1兆字节的文档块组成。后续批处理大小为4兆字节。这可以通过“批量打开”选项进行更改。
图式
在读取MongoDB集合时,OGR必须建立属性和几何字段的模式,因为与没有模式的MongoDB集合相反,OGR有一个固定的模式概念。
在一般情况下,OGR将读取集合的前100个文档(可以使用FEATURE_COUNT_TO_ESTABLISH_FEATURE_DEFN open选项进行更改),并构建最适合找到的字段和值的架构。
如果集合/层以前是用OGR创建的,那么一个OGR元数据特殊集合包含OGR模式,在这种情况下,它将被直接使用。通过设置USE ogr_metadata=NO open选项,可以忽略用u ogr_元数据编写的架构。
还可以设置JSON_FIELD=YES open选项,以便在OGR模式中添加一个_JSON特殊字段。当将MongoDB文档作为OGR特性读取时,文档的完整JSon版本将存储在ùJSon字段中。对于复杂文档或在OGR数据类型中转换不好的数据类型,这可能很有用。在创建/更新文档时,如果存在并设置了\u json字段,则将直接使用其内容(其他字段将被忽略)。
功能ID
MongoDB有一个特殊的id字段,它包含文档的唯一id。此字段作为OGR字段返回,但不能用作OGR special FeatureID字段,该字段必须为整数类型。默认情况下,OGR将尝试读取潜在的“ogc_fid”字段以设置OGR FeatureID。可以使用FID open选项设置要查找的此字段的名称。如果找不到该字段,OGR返回的FID将是从1开始的序列号,但根本不能保证它是稳定的。
ExecuteSQL()接口
如果将“MongoDB”指定为ExecuteSQL()的方言,则将 MongoDB command 可以通过。结果将在单个OGR特性中作为JSon字符串返回。
标准的SQL请求将在客户端执行。
写入支持
可以创建和删除图层/集合。
只有在更新模式下打开数据源时才启用写支持。
使用CreateFeature()插入新功能时,如果命令成功,OGR将获取返回的\u id并将其用于SetFeature()操作。
图层创建选项
支持以下图层创建选项:
OVERWRITE =是/否。是否用要创建的图层名覆盖现有集合。默认为否。
GEOMETRY_NAME =姓名。几何列的名称。默认为“几何体”。
SPATIAL_INDEX =是/否。是否创建空间索引(2dsphere)。默认为“是”。
FID =字符串。要用作FID的带整数值的字段名。默认为“ogc_fid”
WRITE_OGR_METADATA =是/否。是否在u ogr u元数据集合中创建层字段的说明。默认为“是”。
DOT_AS_NESTED_FIELD =是/否。是否将字段名中的点字符视为子文档。默认为“是”。
IGNORE_SOURCE_ID =是/否。是否忽略传递给CreateFeature()的功能中的“id”字段。默认为否。
实例
列出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 }'
从形状文件创建和填充集合:
ogr2ogr -update mongodb+srv://user:password@cluster0-ox9uy.mongodb.net/test shapefile.shp
生成说明
必须针对 MongoDB C++ driver client library ,v3.4.0,以便编译MongoDBv3驱动程序。
你必须先跟上 MongoDB C++ driver client build instructions .
然后:
在Linux/Unix上,运行./configure--with-mongocxxv3(可能是通过重写PKG CONFIG路径来指向{INSTALLATION}/lib/pkgconfig的前缀
在Windows上,在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