mongodb api程式設計

2021-08-10 23:43:53 字數 4568 閱讀 6174

1, 連線類

dbclientconnection(bool _autoreconnect=false, dbclientreplicaset* cp=0, double so_timeout=0)
引數:

_autoreconnect 自動重連

cp 副本集使用引數,可以不用關心

so_timeout 超時時間 單位 秒

2,連線函式

virtual

bool connect(const

char * hostname, string& errmsg)

引數:

hostname 主機名 ip:埠 預設埠 27017

errmsg 錯誤資訊 傳出

返回值:

false 代表失敗

true 代表成功

dbclientconnection 繼承與 dbclientbase ,該類內部包含增刪改查四個介面

進行增刪改查操作

通過api刪除文件

刪除文件

virtual void remove( const string &ns , query q , bool justone = 0 );

○ ns 集合名,填法 庫名.集合名

○ q 刪除條件 query 是乙個類

○ justone 是否刪除一條,預設false

class query

query(const bsonobj& b) : obj(b)

query(const string &json);

query(const char * json);

增加文件

#include "mongo/client/dbclient.h"

#include "mongo/bson/bsonobj.h"

#include "mongo/client/dbclientinte***ce.h"

#include

#include

#include

#include

#include "mongo/bson/bsonelement.h"

#include "mongo/bson/stringdata.h"

#include "mongo/bson/util/atomic_int.h"

#include "mongo/bson/util/builder.h"

#include

#include

//命令空間

using

namespace mongo;

using

namespace

std;

#define remove 0

#define insert 1

int main(int argc, char *argv)

#if remove

//刪除資料

//virtual void remove( const string &ns , query q , bool justone = 0 );

query q("");

//引數一:

conn.remove("songli.songli", q, false);

#endif // remove

#if insert

//插入資料

//virtual void insert( const string &ns , bsonobj obj , int flags=0);

bsonobjbuilder builder;

conn.insert("songli.songli", builder.obj());

bsonobjbuilder b;

b << "id"

<< 6

<< "name"

<< "王盼盼"

<< "age"

<< 23;

conn.insert("songli.songli", b.obj());

//virtual void insert( const string &ns , bsonobj obj , int flags=0);

conn.insert("songli.songli", bson("id"

<< 9

<< "name"

<< "巍盼盼"

<< "age"

<< "23"));

// query q("");

conn.insert( "songli.songli", q.obj);

#endif // insert

查詢語句

virtual bsonobj findone(const string &ns, const query& query, const bsonobj *fieldstoreturn = 0, int queryoptions = 0);

//query find("db.songli.find()");

//bsonobj obj = conn.findone("songli.songli", find.obj);

//cout << obj.numstr(1) << endl;

printf("connection ok\n");

return

0;}

修改文件

void update( const string &ns,

query query,

bsonobj obj,

bool upsert = false, bool multi = false );

○ ns 庫名.集合名

○ query 查詢條件

○ obj 要修改的內容

實現查詢文件

virtual auto_ptr query(const string &ns, query query=query(), int ntoreturn = 0, int ntoskip = 0,

const bsonobj *fieldstoreturn = 0, int queryoptions = 0 , int batchsize = 0 )

○ ns 庫名.集合名

○ query 查詢條件

○ ntoreturn 返回記錄數

○ ntoskip 跳過記錄數

○ fieldstoreturn 返回的字段

○ queryoptions 查詢選項

○ batchsize 批量大小

auto_ptr auto_ptr是智慧型指標,自動釋放dbclientcursor記憶體區域

關注 dbclientcursor 類

可以先呼叫more 判斷是否有next ,得到bsonobj next(); 物件

問題的核心就是如何解析 bsonobj

解析 bsonobj的方式 getfiled 獲得 bsonelement物件 ,這個物件各種轉換函式得到具體的value

可以先用hasfield判斷一下字段是否存在

//g++ -o testmongo testmongo.cpp -lmongoclient -lboost_thread -lboost_filesystem -lboost_program_options -l/home/itcast/driver/boost/lib -l/home/itcast/driver/mongo/lib -i/home/itcast/driver/mongo/include -i/home/itcast/driver/boost/include

#include

#include "mongo/client/dbclient.h"

char dbhost[20]="localhost";

using

namespace mongo;

using

namespace

std;

void printifage(dbclientconnection& c, int age)

} void run() "));

cout

<< "count:"

<< c.count("tutorial.persons") << endl; /**< 顯示person表中的資料數目 */

auto_ptr

cursor = c.query("tutorial.persons", bsonobj());

while( cursor->more() )

cout

<< "\nprintifage:\n";

printifage(c, 33);

} int main(int argc,char *argv)

else

try

catch( dbexception &e )

return

0;

}

PHP 操作mongodb api大部分方法

php mongodb 全部curd操作 author xiaojiang date 2014 10 27 檢視 mongo類版本 1.30 以後版本使用 mongoclient mongo version 連線 m new mongo mongodb localhost 連線多台 m new mo...

程式設計,還是程式設計

喜歡程式設計,雖然水平一般,但還是執著地學習與程式設計有關的知識。中間因為工作關係與程式設計遠離了一段時間,現在又重拾起來,細想起來還是因為喜歡吧。喜歡程式軟體的思想和原理,喜歡程式 的魅力和成就感。程式設計軟體的思想是最值得學習的,一直認為思想決定行動,思想改變世界。每種軟體的流行和受人追捧,無不...

少兒程式設計程式設計

機械人比賽,聽上去讓人有一種高大上的科技感,沒錯,在大多數人眼裡,玩機械人那是科學家做的事情,不過隨著機械人教育的普及,越來越多的孩子也能夠駕馭這高大上的機械人。格物斯坦小坦克告訴你原因,這是歸結於孩子對於程式設計課程的學習,學會對機械人進行程式設計了,自然就能玩轉機械人啦。參加機械人比賽的意義遠遠...