# mongoxclient **Repository Path**: junc23/mongoxclient ## Basic Information - **Project Name**: mongoxclient - **Description**: 利用x2struct对mongo-cxx-driver的一个简单封装。可以像golang一样直接操作结构体。只有基本接口,还不是很完备。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-12-10 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # mongoxclient 利用x2struct对mongo-cxx-driver的一个简单封装,可以像golang一样直接操作结构体。只有基本接口,还不是很完备。**需要C++11支持** ----- ## 范例 范例请参考[main.cpp](test/main.cpp),里面有各个接口的使用举例 ```C++ #include #include #include #include #include "mongoxclient.hpp" // 包含mongoxclient.hpp mongocxx::instance instance{}; using namespace std; // 结构体定义例子 struct User { int uid; string name; int age; vector tags; vector> test; XTOSTRUCT(A(uid, "bson:_id"), O(name, age, tags, test)); // XTOSTRUCT定义,uid作为bson的_id }; int main(int argc, char *argv[]) { mongocxx::uri uri("mongodb://test:test@127.0.0.1:27018/test"); mongocxx::client client(uri); mongocxx::collection collect = client["test"]["test"]; mongoxc::Collection col(collect); // 利用mongocxx::collection构造一个mongoxc::Collection col.RemoveAll({}); // 删除所有的document User u1; // ... 初始化u1结构体 col.Upsert(u1.uid, u1); // Upsert一个结构体 u1.uid = 456; // ... 重新初始化u1结构体 col.Upsert(u1.uid, u1); // Upsert另一个结构体 u1.uid = 789; u1.name = "insert"; col.Insert(u1); // Insert一个结构体 col.Insert(bb::vp{{"_id",1111}, {"name", "insert_bb"}}); // Insert一个bb::vp结构 cout<<"======count=="< all; col.Find({{"_id",123}}).One(get); // 根据bb::vp查找一个document cout<,pair是,intf是interfere的意思,具体支持的类型可以看[bson_builder.h](https://github.com/xyz347/x2struct/blob/master/bson_builder.h) - vp对应的是mgo/bson的M,由于C++不支持A:B这种初始化map的语法,所以用pair来表征一个key value对,然后多个kv对需要用一个vector存储。构造起来比Golang的bson.M麻烦(只要是两层大括号),但是比bsoncxx简单不少。 - 比如构造一个bson.M{"_id":10} 这种数据只需要写{{"_id",10}}即可 - 构造bson.M{"_id":bson.M{"$lt":10}}则是 {{"_id",bb::vp{{"$lt",10}}}} 最别扭的就是多了一倍的括号 - 用pair可以省一层括号,但是表述能力很受限,为了统一,还是全部用vector pair ## 重要说明 - thirdparty里面的mongocxx的lib是基于**g++ (Ubuntu 4.9.4-2ubuntu1~12.04) 4.9.4**编译的,非这个环境需要自行下载代码编译