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