MongoDB
DolphinDB mongodb插件可以建立与mongodb服务器的连接,然后导入数据到DolphinDB的内存表中。
mongodb插件目前支持版本:relsease200, release130, release120。
在插件市场安装插件
版本要求
- DolphinDB Server: 2.00.10及更高版本
安装步骤
在DolphinDB 客户端中使用 listRemotePlugins 命令查看插件仓库中的插件信息。
login("admin", "123456") listRemotePlugins(, "http://plugins.dolphindb.cn/plugins/")
使用 installPlugin 命令完成插件安装。
installPlugin("mongodb")
返回:<path_to_Mongodb_plugin>/PluginMongodb.txt
使用 loadPlugin 命令加载插件(即上一步返回的.txt文件)。
loadPlugin("<path_to_Mongodb_plugin>/PluginMongodb.txt")
注意:若使用 Windows 插件,加载时必须指定绝对路径,且路径中使用"\\"或"/"代替"\"。
接口说明
mongodb::connect
语法
mongodb::connect(host, port, user, password, [db])
参数
- host:MongoDB服务器的地址,类型为string。
- port:MongoDB服务器的端口,类型为int。
- user:MongoDB服务器的用户名,类型为string。如果没有开启mongodb用户权限认证,则填写空字符串""。
- password:MongoDB服务器的密码,类型为string。如果没有开启mongodb用户权限认证,则填写空字符串""。
- db:验证登录用户的数据库,类型为string。在mongodb中存储对应登录用户的数据库。如果不填写,将以参数
host
指定的mongodb服务器的admin
数据库进行登录用户验证。
详情
与MongoDB服务器建立一个连接。返回一个MongoDB连接的句柄,用于load。
例子
conn = mongodb::connect(`localhost, 27017, `root, `root, `DolphinDB)
conn2 = mongodb::connect(`localhost, 27017, `root, `root)
mongodb::load
语法
mongodb::load(connection, collcetionName, query, option, [schema])
参数
- connection:通过mongodb::connect获得的MongoDB连接句柄。
- collcetionName:一个MongoDB中集合的名字。有两种参数模式( collectionName 和 databaseName:collectionName ),第一种会查询在调用mongodb::connect时指定的数据库db,第二种是查询指定database中的collection。
- query:MongoDB查询条件,JSON字符串,类似:{ "aa" : { "$numberInt" : "13232" } }, { "datetime" : { "$gt" : {"$date":"2019-02-28T00:00:00.000Z" }} }。
- option:MongoDB查询选项,JSON字符串,类似:{"limit":123}对查询结果在MongoDB中进行预处理再返回。
- schema:包含列名和列的数据类型的表。如果我们想要改变由系统自动决定的列的数据类型,需要在schema表中修改数据类型,并且把它作为load函数的一个参数。
详情
将MongoDB的查询结果导入DolphinDB中的内存表。支持的数据类型以及数据转化规则参见用户手册数据类型
章节。
例子
conn = mongodb::connect(`localhost, 27017, `root, `root, `DolphinDB)
query='{ "datetime" : { "$gt" : {"$date":"2019-02-28T00:00:00.000Z" }} }'
option='{"limit":1234}'
tb=mongodb::load(conn, `US,query,option)
select count(*) from tb
tb2 = mongodb::load(conn, 'dolphindb:US',query,option)
select count(*) from tb
schema=table(`item`type`qty as name,`STRING`STRING`INT as type)
tb2 = mongodb::load(conn, 'dolphindb:US',query,option,schema)
mongodb::aggregate
语法
mongodb::aggregate(connection, collcetionName, pipeline, option, [schema])
参数
- connection:通过mongodb::connect获得的MongoDB连接句柄。
- collcetionName:一个MongoDB中集合的名字。有两种参数模式( collectionName 和 databaseName:collectionName ),第一种会查询在调用mongodb::connect时指定的数据库db,第二种是查询指定database中的collection。
- pipeline:MongoDB聚合管道,JSON字符串,类似:{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}。
- option:MongoDB查询选项,JSON字符串,类似:{"limit":123}对查询结果在MongoDB中进行预处理再返回。
- schema:包含列名和列的数据类型的表。如果我们想要改变由系统自动决定的列的数据类型,需要在schema表中修改数据类型,并且把它作为load函数的一个参数。
详情
将MongoDB的(聚合)查询结果导入DolphinDB中的内存表。支持的数据类型以及数据转化规则参见用户手册数据类型
章节。
例子
conn = mongodb::connect(`localhost, 27017, "", "", `DolphinDB)
pipeline = "{ \"pipeline\" : [ { \"$project\" : { \"str\" : \"$obj1.str\" } } ] }"
option="{}"
mongodb::aggregate(conn, "test1:collnetion1",pipeline,option)
mongodb::close
语法
mongodb::close(connection)
参数
- connection:通过mongodb::connect获得的MongoDB连接句柄。
详情
关闭一个MongoDB连接句柄。
例子
conn = mongodb::connect(`localhost, 27017, `root, `root, `DolphinDB)
query=`{ "datetime" : { "$gt" : {"$date":"2019-02-28T00:00:00.000Z" }} }
option=`{"limit":1234}
tb = mongodb::load(conn, `US,query,option)
select count(*) from tb
mongodb::close(conn)
mongodb::parseJson
语法
mongodb::parseJson(str, keys, colnames, colTypes)
详情
解析JSON类型的数据,转换到DolphinDB的内存表并返回该内存表。
参数
- str: 需要解析的JSON格式的字符串,为string类型的vector。
- keys: 转换后内存表的列名,一一对应原 JSON 中的键,为string类型的vector。
- colnames: 结果表JSON的键,为string类型的vector。
- colTypes: 向量,表示结果表中的数据类型。
- colTypes支持BOOL, INT, FLOAT, DOUBLE, STRING以及BOOL[], INT[], FLOAT[], DOUBLE[]类型的array vector。其中支持将JSON中的int, float, double类型转换为DolphinDB INT, FLOAT, DOUBLE类型中的的任意一种。
例子
data = ['{"a": 1, "b": 2}', '{"a": 2, "b": 3}']
mongodb::parseJson(data,
`a`b,
`col1`col2,
[INT, INT] )
mongodb::getCollections
语法
mongodb::getCollections([databaseName])
参数
- databaseName: 需要查询的数据库。如果不填,则为mongodb::connect所选的database。
详情
获取指定database的所有集合的名字。
例子
conn = mongodb::connect("192.168.1.38", 27017, "", "")
mongodb::getCollections(conn, "dolphindb")
查询数据示例
query='{"dt": { "$date" : "2016-06-22T00:00:00.000Z" } }';
query='{"bcol" : false }';
query='{"open" : { "$numberInt" : "13232" } }';
query='{"vol" : { "$numberLong" : "1242434"} }';
query=' {"close" : { "$numberDouble" : "1.2199999999999999734" }';
query='{"low" : { "$gt" : { "$numberDecimal" : "0.219711" } } }';
query='{"uid" : { "$oid" : "1232430aa00000000000be0a" } }';
query=' {"sid" : { "$symbol" : "fdf" } }';
query='{"symbol" : "XRPUSDT.BNC"}';
query='{"ts" : { "$date" : { "$numberLong" : "1600166651000" } }';
query='{}';
option='{}';
con=mongodb::connect(`localhost,27017,`admin,`123456,`dolphindb);
res=mongodb::load(con,`collection1,query,option);
mongodb::close(con);
t = select * from res
支持的数据类型
整型
MongoDB类型 | 对应的DolphinDB类型 |
---|---|
int32 | INT |
int64(long) | LONG |
bool | BOOL |
DolphinDB中各类整型的最小值(例如:INT的-2,147,483,648以及LONG的-9,223,372,036,854,775,808)为NULL值。
浮点数类型
MongoDB类型 | 对应的DolphinDB类型 |
---|---|
double | DOUBLE |
decimal128 | DOUBLE |
时间类型
MongoDB类型 | 对应的DolphinDB类型 |
---|---|
date | timestamp |
字符串类型
MongoDB类型 | 对应的DolphinDB类型 |
---|---|
string | STRING |
symbol | STRING |
oid | STRING |
附录:安装构建(可选)
如果不通过插件市场安装插件,也可以选择预编译安装或编译安装方式。
预编译安装
Linux
执行Linux命令,指定插件运行时需要的动态库路径
export LD_LIBRARY_PATH=<PluginDir>/mongodb/bin/linux64:$LD_LIBRARY_PATH //指定动态库位置
在DolphinDBPlugin/httpClient/bin/linux64目录下有预先编译的插件文件,在DolphinDB中执行以下命令导入mongodb插件:
cd DolphinDB/server //进入DolphinDB server目录
./dolphindb //启动 DolphinDB server
loadPlugin("<PluginDir>/mongodb/build/linux64/PluginMongodb.txt") //加载插件
Windows
将DolphinDBPlugin/mongodb/bin/win64目录下的所有文件(包括动态库文件)下载到本地server目录下的plugins目录。其中有预先编译的MongoDB插件文件。在DolphinDB中执行以下命令将其导入:
loadPlugin("<PluginDir>/mongodb/bulid/win64/PluginMongodb.txt") //加载插件
请注意,必须通过绝对路径加载,且路径中使用"\\"或"/"代替"\"。
自行编译
为保证插件能够成功进行编译,将DolphinDBPlugins仓库下载到本地(请切换到相应的分支)。
只需要安装CMake和对应编译器(linux为g++,window为MinGW),即可在本地编译mongodb插件。
Linux
使用CMake构建:
安装CMake:
sudo apt-get install cmake
构建插件内容:
mkdir build
cd build
cmake ../
make
注意 :编译之前请确保libDolphinDB.so在gcc可搜索的路径中。可使用LD_LIBRARY_PATH
指定其路径,或者直接将其拷贝到build目录下。
编译后目录下会产生文件libPluginMongodb.so和PluginMongodb.txt。
Windows
在Windows环境中需要使用CMake和MinGW编译
使用CMake构建:
在编译开始之前,要将libDolphinDB.dll拷贝到build文件夹。
构建插件内容:
mkdir build # 新建build目录
cp <ServerDir>/libDolphinDB.dll build # 拷贝 libDolphinDB.dll 到build目录下
cd build
cmake ../ -G "MinGW Makefiles"
mingw32-make -j4
编译后目录下会产生文件libPluginMongodb.dll和PluginMongodb.txt,还会把<PluginDir>/mongodb/bin/windows下的4个动态库拷贝到该目录下。
注意 :以下编译的mongodb-c-driver、snappy、ICU和openssl的依赖库文件,都可以在<PluginDir>/mongodb/bin目录下找到。
编译依赖库
Linux
我们在/mongodb/bin目录下提供预编译的依赖库 libmongoc, libbson, libicudata, libicuuc。你也可按照本节描述的步骤手动编译依赖库。
安装版本1.0.2的openssl
wget https://www.openssl.org/source/old/1.0.2/openssl-1.0.2i.tar.gz
tar -xzf openssl-1.0.2i.tar.gz
cd openssl-1.0.2i
./config --prefix=/usr/local/openssl1.0.2 -fPIC
make
sudo make install
--prefix是为了指定安装位置,安装mongo-c-driver时会使用到这个版本的openssl的头文件和静态库。
安装snappy
wget https://github.com/google/snappy/archive/1.1.7.tar.gz
tar -zxf 1.1.7.tar.gz
cd snappy-1.1.7/cmake
CXXFLAGS="-fPIC" cmake ..
make
sudo make install
安装ICU
wget https://github.com/unicode-org/icu/releases/download/release-52-2/icu4c-52_2-src.tgz
tar -xzf icu4c-52_2-src.tgz
cd icu/source
./configure
make
sudo make install
安装mongo-c-driver
需要设置环境变量,在命令行中设置,正是刚刚安装openssl的位置。
export OPENSSL_ROOT_DIR=/usr/local/openssl1.0.2
export OPENSSL_CRYPTO_LIBRARY=/usr/local/openssl1.0.2/lib
export OPENSSL_INCLUDE_DIR=/usr/local/openssl1.0.2/include/
wget https://github.com/mongodb/mongo-c-driver/releases/download/1.13.0/mongo-c-driver-1.13.0.tar.gz
tar -xzf mongo-c-driver-1.13.0.tar.gz
cd mongo-c-driver-1.13.0
mkdir cmake-build
cd cmake-build
cmake -DENABLE_AUTOMATIC_INIT_AND_CLEANUP=OFF -DCMAKE_BUILD_TYPE=Release -DENABLE_TESTS=OFF ..
这里我们可以在终端看到mongodb-c-driver需要的依赖是否安装完全。
make
sudo make install
准备依赖库
将libDolphinDB.so拷到编译目录(DolphinDBPlugin/mongodb/build)。
cd DolphinDBPlugin/mongodb/bin/linux
cp <ServerDir>/libDolphinDB.so .
cp /usr/local/lib/libmongoc-1.0.so.0 .
cp /usr/local/lib/libbson-1.0.so.0 .
cp /usr/local/lib/libicudata.so.52 .
cp /usr/local/lib/libicuuc.so.52 .