https://www.cnblogs.com/mxnote/p/17098385.html
mongodb安装
官方教程:https://www.mongodb.com/docs/manual/tutorial/install-mongodb-on-red-hat/
CentOS 7 yum安装MongoDB - 斌言 - 博客园 (cnblogs.com)
1、配置MongoDB的yum源(这里使用阿里云的源),创建文件/etc/yum.repos.d/mongodb-org-6.0.repo
,并输入以下内容
1 | [mngodb-org] |
1 | $ yum update -y # 更新yum |
C++驱动安装
https://www.mongodb.com/docs/drivers/cxx/#mongodb-compatibility
https://mongocxx.org/mongocxx-v3/installation/
安装mongocxx 3.8,对应mongodb 6.0
安装过程中可能会因为缺少依赖而报错,只要根据错误信息安装相关依赖即可
官方标注的前提条件
- Any standard Unix platform, or Windows 7 SP1+
- A compiler that supports C++11 (gcc, clang, or Visual Studio)
- CMake 3.2 or later
- boost headers (optional)
安装Cmake
根据实际需要安装对应的Cmake
1 | $ wget https://github.com/Kitware/CMake/releases/download/v3.27.1/cmake-3.27.1.tar.gz |
安装mongoc
详细过程和解释参照官网:http://mongoc.org/libmongoc/current/installing.html
1 | $ yum install mongo-c-driver-devel |
cmake成功显示如下:
1 | -- Build files have been written to: /home/user/mongo-c-driver-1.24.2/cmake-build |
问题1)-- Looking for ASN1_STRING_get0_data in /usr/lib64/libcrypto.so - not found
- 当openssl <= 1.0.1时,ASN1_STRING_get0_data该方法不存在,作为替代是ASN1_STRING_data方法
- 当openssl > 1.0.1时,ASN1_STRING_get0_data方法存在,但实际出问题的时候,服务器版本是Open SSL1.0.2.k,建议安装之后的版本
参考:https://www.bbsmax.com/A/xl56YnWxJr/
1 | # 安装1.1.0f版本 |
1 | $ cmake --build . |
测试mongoc是否安装成功:
1 |
|
1 | $ gcc test_mongoc.c -I/usr/local/include/libmongoc-1.0 -I/usr/local/include/libbson-1.0 -L/usr/local/lib64 -lmongoc-1.0 -lbson-1.0 |
安装boost库
1、使用yum安装,版本可能不合适(不推荐)
1 | $ yum install boost boost-devel boost-doc |
2、源码安装(国内下载巨慢,建议魔法上网)
去官网选择对应版本下载:https://www.boost.org/users/history/ ,我下载的为1.70.0版本:https://www.boost.org/users/history/version_1_70_0.html
注意:
- 安装boost库对GCC版本也有要求,建议安装高版本的GCC,CentOS 7升级gcc版本 - 姬无华 - 博客园 (cnblogs.com)
- 安装python:
yum install python python-devel
安装boost库的指令流程,下载对应版本的压缩包后:
1 | $ tar zxvf boost_1_70_0.tar.gz |
安装过程中可能会出一些问题,根据提示信息处理,示例如下:
1)缺少Boost库的Unicode/ICU支持,安装ICU库yum install -y libicu-devel
2)
在/etc/ld.so.conf
文件中追加:/usr/local/boost/lib
测试是否安装成功:g++ -o test test.cpp -I /usr/local/boost/include/
1 |
|
安装mongocxx
注意GCC的版本要支持C++17,建议使用GCC7以后的版本
1 | $ wget https://github.com/mongodb/mongo-cxx-driver/releases/download/r3.8.0/mongo-cxx-driver-r3.8.0.tar.gz |
1 | $ echo '/usr/local/lib64' >> /etc/ld.so.conf # 增加libmongocxx.so._noabi的链接路径 |
mongodb测试
g++ -o testmongo testmongo.cpp $(pkg-config --cflags --libs libmongocxx)
1 |
|
GirdFS示例
源自黑马教程
需求总体描述:开发类似于网盘功能,支持文件(图片,视频,mp3等)的上传和下载.mongodb的优势
功能需求:支持多用户
- 用户的校验,必须是注册用户,用户名和密码正确才能上传和下载.(注册部分正常需要web前端开发,该案列不做注册部分功能,直接在mysql的用户表增加记录即可).
- 查看登陆用户上传的文件信息.(支持命令行的方式查看即可,不需要做web前端),实现管理台.
- 上传文件
- 下载上传过的文件到本地.
- 删除上传的文件.(可根据情况是否添加,不是必须)
技术实现要求:Mysql+mongo
- 用mysql存储用户的信息,文件上传和下载的对应关系(本地和mongo中文件的对应关系)
- Mongo存放文件.
MySQL建库建表:
1 | create database ods character set utf8; |
实现:
CMysql.h
和CMysql.cpp
实现和mysql的交互CMongo.h
和CMongo.cpp
实现和mongodb的交互main.cpp
控制台,和用户交互
操作指令:
- 上传 upload srcfile mongofile
- 下载 download mongofile desfile
- 查看 list
- 退出 quit
- 删除 delete mongofile localfile
代码:
1 | // CMysql.h |
1 | // CMysql.cpp |
1 | // CMongo.h |
1 | // CMongo.cpp |
1 | // main.cpp |
编译指令: 注意GCC的版本
1 | g++ main.cpp CMysql.cpp CMongo.cpp -o main -I/usr/include/mysql -L/usr/lib64/mysql -lmysqlclient -ldl -lpthread -lrt -I/usr/local/include/mongocxx/v_noabi -I/usr/local/include/bsoncxx/v_noabi -L/usr/local/lib64 -lmongocxx -lbsoncxx |