mongodb-cxx-driver使用

这篇具有很好参考价值的文章主要介绍了mongodb-cxx-driver使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

mongocxx driver 是构建在 MongoDB C driver 之上的

1.首先需要安装mongo-c-driver

 wget https://github.com/mongodb/mongo-c-driver/releases/download/ 1.23.1/mongo-c-driver-1.23.1.tar.gz 
tar xzf mongo-c-driver-1.23.1.tar.gz 
cd mongo-c-driver-1.23.1 
mkdir cmake-build
cd cmake-build 
cmake -DENABLE_AUTOMATIC_INIT_AND_CLEANUP=OFF  ..
make && make install

2.编译mono-cxx-driver

mongo官方推荐

  • 针对mongocxx-3.7.x,需要libmongoc 1.22.1或更高版本。
  • 对于mongocxx-3.6.x,需要libmongoc 1.17.0或更高版本。
  • 对于mongocxx-3.5.x,需要libmongoc 1.15.0或者更高版本。
  • 对于mongocxx-3.4.x,需要libmongoc 1.13.0或者更高版本。
  • 对于mongocxx-3.3.x,需要libmongoc 1.10.1或更高版本。
  • 对于mongocxx-3.2.x,需要libmongoc 1.9.2或更高版本。
  • 针对mongocxx-3.1.4+,需要libmongoc 1.7.0或更高版本。
  • 对于mongocxx-3.1.[0-3],需要libmongoc 1.5.0或更高版本。
  • 对于 mongocxx-3.0.x,我们推荐使用最新的 1.4.x 版本的 libmongoc

并且当前最稳定的版本是3.5,因此使用3.5.1支持

git config --global http.postBuffer 1048576000
git clone --recursive https://github.com/mongodb/mongo-cxx-driver.git
cd /mongo-cxx-driver
git checkout r3.5.1   #切换到3.5.1分支
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=`pwd`/install
make
make install 

编译后被安装到/mongo-cxx-driver/build/install,将include和lib拿出来使用即可

注意:

mongo-cxx-driver 使用了 C++17 的功能std::optional和 std::string_view

3.启动mongo

wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu2004-6.0.3.tgz
tar xf mongodb-linux-x86_64-ubuntu2004-6.0.3.tgz
mv mongodb-linux-x86_64-ubuntu2004-6.0.3/ /usr/local/mongodb
export PATH=/usr/local/mongodb/bin:$PATH
cd /usr/local/mongodb

此时/usr/local/mongodb/bin目录下包含三个:install_compass,mongod,mongos

  • install_compass:MongoDB Compass的特定于平台的安装脚本 。
  • mongod:mongoDB 服务端工具
  • mongos:mongos 是 MongoDB shard 的缩写,它是一个为应用层提供查询请求并决定数据在 MongoDB 分片中位置的路由服务。

创建目录,mkdir -p /data/db 存储mongo数据,最终执行mongod即可启动mongo服务器

通过容器启动mongo

第一步:拉取镜像

docker pull mongo:latest

第二步:启动容器

docker run -itd --name mongo -p 27017:27017 -v /xxx/mongodb:/data/db mongo --auth
  • -p:映射容器服务的 27017 端口到宿主机的 27017 端口,mongodb 默认端口为 27017。容器外部可以通过宿主机 IP 27017 端口访问到容器内的 mongodb 服务
  • -v:为设置容器的挂载目录,这里是将 <LocalDirectoryPath> 即本机中的目录挂载到容器中的 /data/db中,作为 mongodb 的存储目录(建议为 /mongodb/data
  • --name:为设置该容器的名称
  • -d:设置容器以守护进程方式运行
  • --auto:需要密码才能访问服务

第三步:进入容器

docker exec -it mongo /bin/bash

mongodb-cxx-driver使用

 第四步:创建用户

mongosh admin

db.createUser({ user:'admin',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]});


db.auth('admin', '123456')

mongodb-cxx-driver使用

 db.createUser的各个字段含义:

  user字段,为新用户的名字;
    pwd字段,用户的密码;
    cusomData字段,为任意内容,例如可以为用户全名介绍;
    roles字段,指定用户的角色,可以用一个空数组给新用户设定空角色;
    在roles字段,可以指定内置角色和用户定义的角色。

Built-In Roles(内置角色):
    1. 数据库用户角色:read、readWrite;
    2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
    3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
    4. 备份恢复角色:backup、restore;
    5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
    6. 超级用户角色:root  

此时可以直接进入容器操作mongo

mongodb-cxx-driver使用

 不用再安装mongodbshell

4.使用mongodb shell

MongoDB Shell 是mongosh一个功能齐备的 JavaScript 和 Node.js 16.x  REPL环境,用于与 MongoDB 部分进行交互。您可以使用 MongoDB Shell 直接使用数据库测试查询和操作。

curl -O https://downloads.mongodb.com/compass/mongosh-1.6.1-linux-x64-openssl11.tgz?_ga=2.45979044.1274179345.1671708610-47372173.1671708610
tar xf mongosh-1.6.1-linux-x64-openssl11.tgz?_ga=2.45979044.1274179345.1671708610-47372173.1671708610
cd mongosh-1.6.1-linux-x64-openssl11/bin
chmod +x mongosh

终端执行mongosh,连接到mongodb服务器

默认连接到mongosh " mongodb://localhost:27017 "

注意:系统安装了openssl1故此处下载openssl111.tgz

4.1 mongodb shell操作

1)创建用户

test> use admin
switched to db admin
admin> db.createUser({user: 'test', pwd: 'admin1234', roles:[{ role: 'readWrite', db: 'test' }]})
{ ok: 1 }

1)创建数据库

test> use foundry_connector
switched to db foundry_connector
foundry_connector>

如果数据库不存在则创建,存在则切换到对应数据库

 2)显示数据库

test> show dbs
admin   40.00 KiB
config  60.00 KiB
local   72.00 KiB
test> use foundry_connector
switched to db foundry_connector
foundry_connector> show dbs
admin    40.00 KiB
config  108.00 KiB
local    72.00 KiB

3)插入数据

发现创建的数据库不在数据库列表中,需要插入一些数据才能显示出来

foundry_connector> db.foundry_connector.insert({"id":"1","name":"face","tags":"face_recognize","desc":"hhh"})
DeprecationWarning: Collection.insert() is deprecated. Use insertOne, insertMany, or bulkWrite.
{
  acknowledged: true,
  insertedIds: { '0': ObjectId("63a519a6c5abf6f696548aa5") }
}
foundry_connector> show dbs
admin               40.00 KiB
config             108.00 KiB
foundry_connector   40.00 KiB
local               72.00 KiB
foundry_connector>

4)创建集合

在数据库foundry_connector中创建集合

5)查询

test> db.foundry_connector.find().pretty()
[
  {
    _id: ObjectId("63a52198f2ca74e6853755f3"),
    id: '1',
    name: 'face',
    tags: 'face_recognize',
    desc: 'hhh'
  }
]

删除

1)删除单个

 db.data_set_source.deleteOne({'_id':'69'})

mongodb-cxx-driver使用

 2)删除多个

mongodb-cxx-driver使用

5.C++ example

test.cc示例如下

#include <iostream>
#include <cstdint>

#include <bsoncxx/builder/stream/document.hpp>
#include <bsoncxx/json.hpp>

#include <mongocxx/client.hpp>
#include <mongocxx/instance.hpp>

using bsoncxx::builder::stream::close_array;
using bsoncxx::builder::stream::close_document;
using bsoncxx::builder::stream::document;
using bsoncxx::builder::stream::finalize;
using bsoncxx::builder::stream::open_array;
using bsoncxx::builder::stream::open_document;

int main() {

    std::cout<<"1.初始化"<<std::endl;
    const char* mongoURI = "mongodb://127.0.0.1:27017";
    mongocxx::instance inst{};
    mongocxx::uri uri(mongoURI);

    //2.连接mongo
    std::cout<<"2.连接mongo"<<std::endl;
    mongocxx::client conn{uri};
    auto collection = conn["foundry_connector"]["foundry_connector"];
    if(collection)
        std::cout<<"connect mongodb ok"<<std::endl;

    // 3.创建文档
    std::cout<<"3.创建并插入文档"<<std::endl;
    auto builder = bsoncxx::builder::stream::document{};
    bsoncxx::document::value doc_value = builder
            << "item" << "journal"
            << "qty" << 25
            << "tags" << bsoncxx::builder::stream::open_array
            << "blank" << "red"
            << close_array
            << "size" << bsoncxx::builder::stream::open_document
            << "h" << 14
            << "w" << 21
            << bsoncxx::builder::stream::close_document
            << bsoncxx::builder::stream::finalize;

    // 4.向集合插入文档
    bsoncxx::document::view doc_view = doc_value.view();
    bsoncxx::stdx::optional<mongocxx::result::insert_one> result = collection.insert_one(doc_view);

    // 5.插入另一个文档
    builder << "field_name" << "value_1";
    collection.insert_one(builder.view());

    // Find one with a query filter
    std::cout<<"4.查询"<<std::endl;
    bsoncxx::stdx::optional<bsoncxx::document::value> maybe_result = collection.find_one(document{} << "i" << 102 << finalize);
    if(maybe_result) {
        std::cout << bsoncxx::to_json(*maybe_result) << "\n";
    }

    // Find all in a collection
    std::cout<<"5.查看所有collection"<<std::endl;
    auto cursor = collection.find({});
    for (auto&& doc : cursor) {
        std::cout << bsoncxx::to_json(doc) << std::endl;
    }

    //删除
    bsoncxx::stdx::optional<mongocxx::result::delete_result> delete_result = collection.delete_many({});
    if(delete_result) {
        std::cout <<"Number of deleted document(s): "<< delete_result->deleted_count() << "\n";
    }

    std::cout << "Completed\n";
}

cmakelists.txt内容如下文章来源地址https://www.toymoban.com/news/detail-451127.html

cmake_minimum_required(VERSION 3.18)
SET(CMAKE_CXX_STANDARD 17)

project(test)
set(INCLUDE_PATH ${CMAKE_SOURCE_DIR}/3rdparty/include)
set(LIB_PATH ${CMAKE_SOURCE_DIR}/3rdparty/lib)

include_directories(${INCLUDE_PATH})
link_directories(${LIB_PATH})

add_executable(test test.cc)
target_link_libraries(test
    bsoncxx
    mongocxx
)

到了这里,关于mongodb-cxx-driver使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 4大企业实例解析:为何MongoDB Atlas成为AI服务构建的首选

    随着人工智能和生成式AI技术的迅猛发展,众多企业和机构正积极利用自然语言处理(NLP)、大型语言模型(LLM)等前沿技术,打造出一系列AI驱动的产品、服务和应用程序。 本文将展示四家已在AI创新领域取得显著成效的企业,以及他们与MongoDB的紧密合作。这些企业选择了

    2024年04月10日
    浏览(50)
  • 前端Vue Node.js + Express + MongoDB 构建的后端服务API接口

    构建一个使用 Vue.js 作为前端, Node.js + Express + MongoDB 作为后端服务的全栈应用涉及到多个步骤。这里简要概述整个过程,并提供一些基本的代码示例来帮助你开始。 安装 MongoDB: 根据你的操作系统从 MongoDB 官网 下载并安装 MongoDB。 启动 MongoDB 服务: 安装完成后,根据 MongoDB 的

    2024年04月14日
    浏览(51)
  • MongoDB:在 Java 中使用 MongoDB

    除了通过启动 mongo 进程进如 Shell 环境访问数据库外,MongoDB 还提供了其他基于编程语言的访问数据库方法。MongoDB 官方提供了 Java 语言的驱动包,利用这些驱动包可使用多种编程方法来连接并操作 MongoDB 数据库。 想要在 Java 程序中使用 MongoDB,需要确保您的电脑上已经安装了

    2024年02月16日
    浏览(40)
  • 使用navicat for mongodb连接mongodb

    上文mongodb7.0安装全过程详解我们说过,在安装的时候并没有勾选 install mongodb compass 我们使用navicat去进行可视化的数据库管理 navicat for mongodb下载地址,我们选择试用版进行下载就可以 安装时可选择安装到 D盘 安装完后打开可见此页面,如下图所示: 点击左上角连接,选择

    2024年02月09日
    浏览(39)
  • 【初始MongoDB】MongoDB的使用(对比MySQL)

    NoSQL(NoSQL = Not Only SQL),意即反SQL运动,指的是非关系型的数据库,是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于目前铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入

    2024年03月12日
    浏览(61)
  • MongoDB文档-进阶使用-MongoDB索引-createindex()与dropindex()-在MongoDB中使用正则表达式来查找

     阿丹:         之前研究了MongoDB的基础增删改查。在学会基础的数据库增删改查肯定是不够的。这个时候就涉及到了数据库搜索的时候的效率。需要提高数据的搜索效率。         在所以数据库中如果没有数据索引的时候。如果需要查找到一些数据。都会去主动扫描所有

    2024年02月14日
    浏览(41)
  • MongoDB, SpringBoot中MongoDB注解概念及使用

    MongoDB——》SpringBoot中MongoDB注解概念及使用 一、@Document : 文档 1、概念 2、用法 二、@Id : 主键 1、概念 2、用法 三、@Indexed : 索引 1、概念 2、用法 四、@CompoundIndex : 联合索引 1、概念 2、用法 五、@Field : 属性 1、概念 2、用法 六、@Transient: 属性 1、概念 2、用法 七、@

    2024年02月12日
    浏览(51)
  • SpringBoot 如何使用 Spring Data MongoDB 访问 MongoDB

    在现代应用程序开发中,许多应用都依赖于数据库来存储和检索数据。MongoDB 是一个流行的 NoSQL 数据库,而 Spring Boot 是一个广泛使用的 Java 开发框架。本文将介绍如何使用 Spring Boot 和 Spring Data MongoDB 来访问和操作 MongoDB 数据库。 MongoDB 是一个开源的 NoSQL 数据库,它以文档的

    2024年02月07日
    浏览(38)
  • MongoDB文档-进阶使用-spring-boot整合使用MongoDB---MongoRepository完成增删改查

    阿丹:         之前学习了在MongoDB客户端上的MongoDB语句现在将MongoDB整合到spring项目。 MongoDB文档--基本概念_一单成的博客-CSDN博客 MongoDB文档--基本安装-linux安装(mongodb环境搭建)-docker安装(挂载数据卷)-以及详细版本对比_一单成的博客-CSDN博客 MongoDB文档--基本安装-linu

    2024年02月14日
    浏览(45)
  • mongodb使用心得

    collection:相当于db的表 document:相当于表的记录 单机模式启动mongo server replica set模式启动 replica set模式其实就是主从模式。 做mongo的启动配置文件: 注意 :dbPath和systemLog文件夹要事先建好! 将mongo安装为windows服务: 在任务管理器里手工启动之即可。 类似的,安装并启动复

    2024年02月11日
    浏览(17)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包