MongoDB&C++开发(五)C++ Driver API 主要类及成员函数

MongoDB C++ Driver API 官方链接

1. bsoncxx

bsoncxx::stream

这里写图片描述
这个命名空间下有一些模板类,模板类中有一些重载<<运算符的函数方法。常用的array和document继承了这些类。

key_context

即键值对中的键key

single_context

一个单独的值,调用single_context往value_context或array_context中写值

value_context

即键值对中的一个值,后面可以跟很多键值对
在document中,第一个参数是key_context,然后是value_context,然后是key_context
builder << key_context << value_context <

array_context

任意多个值
builder << array_context << array_context <

array

构造一个BSON array 的流式接口,继承了array_context。
这里写图片描述
array() 构造函数
view() BSON array的一个视图
extract() 将这个array的所有权转移给调用者
clear() 将array重置为空

document

与array类似,也有这样四个public的成员函数。

bsoncxx::array & bsoncxx::document

这两个命名空间中都有三个类 element,value,view
以document中的为例
这里写图片描述
element:就理解成为一个document中的类型不定的元素(可能是key,可能是值),调用type()能得到这个element的类型,调用key()可以得到键(stdx::string_view key () const 注意这个函数的返回值),使用形如get_X()的函数(如types::b_document get_document () const,types::b_array get_array () const,types::b_double get_double () const等)可以得到特定类型的值。
value:是一个只读的有自己的缓冲区的document。(应慎重使用,尽量使用view)
view:是一个只读的,没有所有权的document的视图。

2. mongocxx

mongocxx::collection类

这个类应该是最重要的吧~
函数参数中filter是筛选条件是一个bsoncxx::document::view_or_value,最后一个参数是一个操作可选的参数。

count

std::int64_t count (bsoncxx::document::view_or_value filter, const options::count &options=options::count())
计算符合filter条件的documents数目。

delete_many & delete_one

stdx::optional< result::delete_result > delete_many (bsoncxx::document::view_or_value filter, const options::delete_options &options=options::delete_options())
删除符合filter条件的所有文件。
stdx::optional< result::delete_result > delete_one (bsoncxx::document::view_or_value filter, const options::delete_options &options=options::delete_options())
删除符合filter条件的一个文件。

drop

void drop ()
从数据库中删除此collection及其所包含的所有documents。

find & find_one & find_one_and_delete……

这里写图片描述
replacement和update是需要替换/更新的内容。

insert_one & insert_many

这里写图片描述

replace_one & update_one & update_many

这里写图片描述
replacement和update是需要替换/更新的内容。

mongocxx::model

这里写图片描述

delete_many & delete_one

delete_many 是删除所有符合条件的documents,delete_one是删除第一个符合条件的document。(注意:第一个~)
delete_many (bsoncxx::document::view_or_value filter)
delete_one (bsoncxx::document::view_or_value filter)
注意参数

insert_one

插入一个document
insert_one (bsoncxx::document::view_or_value document)

replace_one

替换符合filter条件的一个document,其中的内容替换成replacement
replace_one (bsoncxx::document::view_or_value filter, bsoncxx::document::view_or_value replacement)

update_many & update_one

update_many是更新所有符合filter条件的documents,update是更新的内容。
update_one是更新一个符合filter条件的document,update是更新的内容。
update_many (bsoncxx::document::view_or_value filter, bsoncxx::document::view_or_value update)
update_one (bsoncxx::document::view_or_value filter, bsoncxx::document::view_or_value update)

mongocxx::result

这里写图片描述
这个命名空间里面封装的类主要用于返回某种操作的批处理结果,以及进行一些简单的操作文件个数的统计。

bulk_write

这个类里面有一些形如 ××operation_count()的函数,得到经过××操作之后插入/匹配/修改/删除/……的文件的个数。

其他的几个类

都有const result::bulk_write & result () const这样的一个函数,返回进行某种操作之后的批处理结果。也有一些形如 ××operation_count()的函数。

mongocxx::options

这里写图片描述
这个命名空间里面封装的类主要用于设置MongoDB的一些操作的可选参数。
如:aggregate设置MongoDB 统计操作的一些可选参数的类。

最近重构并优化了一套后端服务的代码: 1. 设计并开发高效的C++对象池算法,时间复杂度为 O(1) 在整个重构框架中,对象池是负责管理内存的底层基本模块 2. 利用命令模式的思想开发 Redis 子模块 抽象出方便高效的接口提供给上层程序员使用 3. 利用组合模式和装饰模式的思想开发 MongoDB 数据库查询条件装饰器 将查询条件和数据库 MongodbModule 数据模型进行解耦合 4. 抽象出一套 MongoDB Module 结果集接口 通过模板和特化技术实现 string/int 等不同索引型的结果集 5. 开发 AbstractMongodbModule 处理通用的 MongoDB 数据库表数据操作 数据库中不同的表都有自己的 AbstractMongodbModule 子对应 6. 用 Perl 开发自动代码生成器,上层程序员对照数据库表结构写 .tmpl 配置文件, 自动生成该数据库表的 MongodbModule 子,减轻程序员新增表时的工作量 7. 结合 Redis 模块和 MongoDB 模块,开发 HierarchicalModule 分层数据模型 构造一个 Redis 缓存层 + MongoDB 持久层的后台 Server 架构 并通过简单方便的接口供上层程序员使用,具体的数据分层处理对上层程序员是黑盒的 8. 设计并开发整套缓存层使用的 KEY 规则,方便缓存更新 结合公司的数据订阅系统进行 Redis缓存层 + MongoDB 持久层数据更新功能 9. 重构后的分层数据架构比原有接口效率提高 5 - 400 倍(返回数据记录条数从 150 - 5 条) 绝大部分时间后端接口需要获取记录个数在 50 以内,所以效率提升在 100 倍左右
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值