mongoDB的c++接口的说明

说明: * IN表示输入参数; * OUT表示输出参数;

(1)构造函数:

DBClientConnection(bool auto_connect, 0, double so_timeout);

  • auto_connect(IN):连接失败后自动重连
  • so_timeout(IN):非连接超时,tcp的读写超时

(2)连接mongo:

bool connect(string server, string& errmsg);
  • 返回值:成功/失败
  • server(IN):连接的服务器
  • errmsg(OUT):出错信息

示例:

bool auto_connect = true;
double so_timeout = 3;
string host = "127.0.0.1";
string port = "3003";
string errmsg = "";
DBClientConnection pConn = new DBClientConnection(auto_connect, 0, so_timeout);
pConn->connect(host+":"+port, errmsg);

(3)查询

auto_ptr query(const string &ns, Query query, int nToReturn, int nToSkip,const BSONObj *fieldsToReturn, int queryOptions , int batchSize);
  • 返回值:结果集
  • ns(IN):命名空间,db_name.collection_name
  • query(IN):查询的条件,相当于mysql中的where
  • nToReturn:返回结果条数,相当于mysql中的limit
  • nToSkip:跳过的结果条数,相当于mysql中的offset
  • fieldsToReturn:返回列集合
  • queryOptions:详见QueryOptions这个枚举,填0即可
  • batchSize:未说明

示例:

string db = "shool";
string collection = "student";
Query condition = QUERY("age"<<20);
int limit = 10;
int offset = 5;
BSONObj columns = BSON("uid"<<1<<"name"<<1);
auto_ptr cursor;
cursor = pConn->query(db+"."+collection, condition, limit, offset, columns, 0, 0);

其效果相当于:

select uid,name from shool.student where age=20 limit 5,10;

对结果集的操作:

int uid=0;
string name="";
while(cursor->more())
{
    BSONObj p = cursor->next();
    uid = p["uid"].Int();
    name = p["name"].String();
    count << uid << " " << name << endl;
}

(4)插入

void insert(const string &ns, BSONObj obj, int flags);

  • ns(IN):命名空间,db_name.collection_name
  • obj(IN):插入的列
  • flags(IN):详见API文档,默认填零即可

示例:

BSONObj insert = BSON("uid"<<10001<<"name"<<"skean1017");
 pConn->insert(db+"."+collection, insert, 0);

其效果相当于:

insert into shool.student (uid, name) values (10001, skean1017″);

(5)删除

void remove(const string &ns, Query query, bool justOne);
  • ns(IN):命名空间,db_name.collection_name
  • query(IN):查询条件
  • justOne(IN):是否只删除匹配的第一条

示例:

Query query = QUERY("name"<<"skean1017");
 pConn->remove(db+"."+collection, query, true);

其效果相当于:

delete from shool.student where name=”skean1017″;

(6)修改

void update(const string &ns , Query query , BSONObj obj , bool upser , bool multi);
  • ns(IN):命名空间,db_name.collection_name
  • query(IN):查询条件
  • obj(IN):修改后的值
  • upser(IN):是否upser,如果不存在则插入记录
  • multi(IN):是否为符合文档

示例:

Query query = QUERY("uid"<<10001);
BSONObj obj = BSON("$set"<<"name"<<"habadog1203");(#add可能有误,待改)
pConn->update(db+"."+collection, query, obj, false, false);

其效果相当于:

update shool.student set name=”habadog1203 where uid=10001;
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
最近重构并优化了一套后端服务的代码: 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、付费专栏及课程。

余额充值