vscode c++链接mongo数据库的操作随笔

 

1、需要先下载安装各种软件及依赖

1)c++链接mongo数据库需要涉及到这几个库,而且版本直接有范围

openssl

boost  (安装https://blog.csdn.net/Aliven888/article/details/111153535)

cmake

mingw(如果想进行代码移植,或者用clion等编译器工作,可以用mingw编译器,就不用安装gcc和g++了)

libbson()

mongo-c(版本1.19.2)

mongocxx (版本3.6.6)

 如果mongocxx安装指定c++17标准,就按照下面的命令cmake进行编译

然后用vs工具build sln的文件,再install即可

   libbson
        cmake -G "Visual Studio 17 2022" -DCMAKE_INSTALL_PREFIX="C:/Usr/local/cxx_17/libbson-1.9.5" -DCMAKE_PREFIX_PATH="C:/Usr/local/cxx_17/libbson-1.9.5" -DCMAKE_CXX_STANDARD=17 .
    mongo-c
        cmake -G "Visual Studio 17 2022" -DCMAKE_INSTALL_PREFIX=C:/Usr/local/cxx_17/mongo-cpp-driver -DCMAKE_PREFIX_PATH=C:/Usr/local/cxx_17/mongo-cpp-driver -DCMAKE_CXX_STANDARD=17 .
    mongo-cxx
        cmake -G "Visual Studio 17 2022" -DCMAKE_INSTALL_PREFIX="C:/Usr/local/cxx_17/mongo-cxx-driver" -DCMAKE_PREFIX_PATH="C:/Usr/local/cxx_17/mongo-cpp-driver" -DCMAKE_CXX_STANDARD=17 -DMONGOCXX_ENABLE_MONGOC=ON -DCMAKE_BUILD_TYPE=Release -DBSONCXX_POLY_USE_BOOST=1 -DBOOST_ROOT=C:/Usr/local/cxx_14/boost_1_82_0 .

 

 2、vscode安装,用vscode的好处就是会省事情很多

1)下载安装vscode2022版本

2)也可以用vscode进行安装上面的各种类库

先进入到编译目录,例如mongoc目录下面

然后用cmake进行编译

cmake -G "Visual Studio 17 2022" "-DCMAKE_INSTALL_PREFIX=C:\mongo-cpp-driver" "-DCMAKE_PREFIX_PATH=C:\mongo-cpp-driver"

如果要指定后面用c++20标准或者c++14标准等这里可以指定,默认是c++14标准

cmake -G "Visual Studio 17 2022" -DCMAKE_INSTALL_PREFIX="C:/Usr/local/cxx_20/mongo-cpp-driver" -DCMAKE_PREFIX_PATH="C:/Usr/local/cxx_20/mongo-cpp-driver" -DCMAKE_CXX_STANDARD=20
 

 

这里多说一句,我也尝试用了mingw,但是很容易各种报错,用mingw的好处是,可以平移迁移到linux上去

cmake -G "MinGW Makefiles" -DCMAKE_C_FLAGS="-D__USE_MINGW_ANSI_STDIO=1" .

下一步,则是在目录中找到一个文件,用vscode双击打开(一个sln结尾的文件)

 下一步,右键生成,build和install即可

这里注意一下,因为默认安装是c++14版本,因为第二次安装我需要c++17版本,所以我在这里又指定了一下版本(不知道有没有用)

 

 

 

 3、安装mongo数据库

4、vscode创建项目

 5、当左右的基础工作都已经做好以后,开始进行项目配置

 1)需要先把各个库的lib、include和bin命令都复制到当前路径下

 

 

 

 

 2)然后进行配置,右键点击属性

 3)配置完以后,重新扫描解决方案。

配置include

 所有选项设置附加目录

 链接器lib配置

 

 

6、代码试运行

// mongo_cpp.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <mongocxx/client.hpp>
#include <mongocxx/instance.hpp>
#include <mongocxx/uri.hpp>
#include <bsoncxx/builder/stream/document.hpp>
#include <bsoncxx/json.hpp>
//#include <boost/none.hpp>
//#include <boost/optional/optional.hpp>
//#include <boost/version.hpp>
//#include <boost/utility/string_ref.hpp>


int main()
{
    mongocxx::instance inst{}; // 实例化 Mongocxx 库
    mongocxx::uri uri("mongodb://localhost:27017"); // 连接 MongoDB URI
    mongocxx::client conn(uri); // 创建连接实例

    auto collection = conn["testdb"]["testcollection"]; // 获取集合

    // 插入文档
    bsoncxx::builder::stream::document doc{};
    doc << "name" << "Alice" << "age" << 28;
    collection.insert_one(doc.view());

    // 查询文档
    auto result = collection.find_one(bsoncxx::builder::stream::document{} << "name" << "Alice" << bsoncxx::builder::stream::finalize);
    if (result) {
        std::cout << bsoncxx::to_json(*result) << std::endl;
    }
    else {
        std::cout << "No matching documents found." << std::endl;
    }

    return 0;
}

这里要注意一下,有时候找不到第三方库文件,无法引入成功,可能是include等目录下层级不对。因为引入的路径只到include,但是mongocxx下还有两个层级,而不是直接xx.hpp或cpp

 

7、如果用clion,使用cmake进行代码编译执行,会涉及到库的引用

 

cmake_minimum_required(VERSION 3.25)
project(clion_mongo_cxx_v2)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_VERBOSE_MAKEFILE ON)


# 编译文件
add_executable(clion_mongo_cxx_v2 report_algorithm_v1/main.cpp)

# include 目录
# 使用target_include_directories来指定目标的include目录,而不是全局的include目录
# 使用${CMAKE_CURRENT_BINARY_DIR}来获取当前的二进制目录
target_include_directories(clion_mongo_cxx_v2 PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/../venv/include)

# lib 目录(链接器)
# 不需要使用link_directories来指定lib目录,而是直接使用库文件的绝对或相对路径

#
#target_link_libraries(目标(项目名) xxx.dll)
# 使用target_link_libraries来链接库文件,而不是dll文件,dll文件会在运行时自动加载
target_link_libraries(clion_mongo_cxx_v2 PRIVATE
        ${CMAKE_CURRENT_BINARY_DIR}/../venv/lib/bsoncxx.lib
        ${CMAKE_CURRENT_BINARY_DIR}/../venv/lib/mongocxx.lib

        ${CMAKE_CURRENT_BINARY_DIR}/../venv/lib/bson-1.0.lib
        ${CMAKE_CURRENT_BINARY_DIR}/../venv/lib/mongoc-1.0.lib
        ${CMAKE_CURRENT_BINARY_DIR}/../venv/lib/zlib.lib
        )

 

8、c++ 17的安装过程

由于之前一直用c++14,但是用的很多代码都很不舒服,所以,这次想直接升级到c++17

之前有过尝试,但是失败了,后来拉通紫剑大神,在这里先感谢紫剑大神。

说明失败原因:版本不对

https://mongocxx.org/mongocxx-v3/installation/windows/

https://www.mongodb.com/docs/drivers/cxx/

具体可以看一下这两个链接。

我c++14版本使用的版本是

 

 这次成功了,用的c++17版本是

 

 成功了,cmake命令

        cmake -G "Visual Studio 17 2022" -DCMAKE_INSTALL_PREFIX=C:/Usr/local/cxx_17/mongo-c-driver -DCMAKE_PREFIX_PATH=C:/Usr/local/cxx_17/mongo-c-driver  .



        cmake -G "Visual Studio 17 2022" -DCMAKE_INSTALL_PREFIX="C:/Usr/local/cxx_17/mongo-cxx-driver" -DCMAKE_PREFIX_PATH="C:/Usr/local/cxx_17/mongo-c-driver" -DCMAKE_CXX_STANDARD=17 -DCMAKE_BUILD_TYPE=Release   .

 

9、vscode 2022格式化代码插件是codemaid

 

 

posted @ 2023-05-20 20:16  我当道士那儿些年  阅读(349)  评论(0编辑  收藏  举报