MongoDB¶
2.1 新版功能.
司机简称
MongoDB
生成依赖项
Mongo C++客户端遗产库
此驱动程序可以连接到a MongoDB服务。
驱动程序支持文档/功能和集合/层的读取、创建、更新和删除操作。MongoDB数据库必须存在,然后才能使用OGR对其进行操作。
该驱动程序使用传统的MangGDB C++驱动程序客户端库。要连接到MongoDB 3.0或更高版本的服务器,从GDAL3.0开始,使用新的 MongoDBv3 驱动程序,使用MangGDB C++ V3.4.0客户端库。这个驱动程序最终会支持MongoDBv3
驱动程序功能¶
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 ,例如mongodb:// [usr:pwd公司@] 主机1 [:端口1] … [,主机号[:端口号] ] ] [/[db] [?选项] ]
一个只使用MongoDB:作为名称和打开选项来指定主机、端口、用户、密码、数据库等。。。
可用的打开选项有:
URI =uri: Connection URI
HOST =主机名:服务器主机名。默认为本地主机。
PORT =端口。服务器端口。默认值为27017。
DBNAME =数据库名称。数据库名称。应在连接到启用了用户身份验证的主机时指定。
AUTH_DBNAME =数据库名称。身份验证数据库名称,以防它与要处理的数据库不同。
USER =姓名。用户名。
PASSWORD =密码。用户密码。
AUTH_JSON =json_字符串。身份验证元素作为JSon对象。这是用于高级身份验证的。要放入字典中的JSon字段包括:
“mechanism”:要使用的sasl机制的字符串名称(MONGODB-CR、SCRAM-SHA-1或DEFAULT)。强制性的。
“user”:要验证的用户的字符串名。强制性的。
“db”:auth命令的数据库目标,用于标识用户凭证信息的位置。如果凭证信息存储在mongo集群之外,则可能是“$external”。强制性的。
“pwd”:密码数据。
“digestPassword”:布尔值,如果“pwd”未被消化,则设置为true(默认值)
“pwd”:密码数据。
“serviceHostname”:要使用的GSSAPI主机名。默认为远程主机的名称。
SSL_PEM_KEY_FILE =文件名。SSL PEM证书/密钥文件名。
SSL_PEM_KEY_PASSWORD =密码。SSL PEM密钥密码。
SSL_CA_FILE =文件名。SSL证书颁发机构文件名。
SSL_CRL_FILE =文件名。SSL证书吊销列表文件名。
SSL_ALLOW_INVALID_CERTIFICATES =是/否。是否允许连接到证书无效的服务器。默认为否。
SSL_ALLOW_INVALID_HOSTNAMES =是/否。是否允许连接到主机名不匹配的服务器。默认为否。
FIPS_MODE =是/否。启动时是否激活FIPS 140-2模式。默认为否。
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 =是/否。是否使用批量插入创建特征。默认为“是”。
注意:SSL_ * 打开多个类型的MongoDB数据库时,FIPS_MODE选项必须设置为相同的值。这是蒙哥C++驱动程序的一个限制。
过滤¶
当“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://user:password@ds047612.mongolab.com:47612/gdalautotest
在MongoDB字段上筛选:
ogrinfo -ro mongodb://user:password@ds047612.mongolab.com:47612/gdalautotest -where '{ "field": 5 }'
从形状文件创建和填充集合:
ogr2ogr -update mongodb://user:password@ds047612.mongolab.com:47612/gdalautotest shapefile.shp
生成说明¶
必须针对 MongoDB C++ driver client library ,在其“遗留”版本中(使用1.0.2测试),以便编译MongoDB驱动程序。
你必须先跟上 MongoDB C++ driver client build instructions ,这需要有可用的Boost库。
然后:
在Linux/Unix上,使用mongocxx=/path/to/installation/root运行./configure--。如果在系统路径中找不到Boost库,则可以指定找到库时目录的路径——Boost lib path=/path/to/Boost/libs。
在Windows上,在nmake.opt(或加载项nmake.local)中取消注释并调整以下内容:
# Uncomment for MongoDB support # This configuration is valid for a libmongoclient built as a DLL with: # scons.bat --32 --dynamic-windows --sharedclient --prefix=c:\users\even\dev\mongo-client-install # --cpppath=c:\users\even\dev\boost_1_55_0_32bit --libpath=c:\users\even\dev\boost_1_55_0_32bit\lib32-msvc-10.0 install # Uncomment if plugin is preferred #MONGODB_PLUGIN = YES MONGODB_INC = c:/users/even/dev/mongo-client-install/include # Boost library names must be edited to reflect the actual MSVC and Boost versions BOOST_INC = c:/users/even/dev/boost_1_55_0_32bit BOOST_LIB_PATH= c:\users\even\dev\boost_1_55_0_32bit\lib32-msvc-10.0 MONGODB_LIBS = c:/users/even/dev/mongo-client-install/lib/mongoclient.lib \ $(BOOST_LIB_PATH)\libboost_thread-vc100-mt-1_55.lib \ $(BOOST_LIB_PATH)\libboost_system-vc100-mt-1_55.lib \ $(BOOST_LIB_PATH)\libboost_date_time-vc100-mt-1_55.lib \ $(BOOST_LIB_PATH)\libboost_chrono-vc100-mt-1_55.lib