ZBLOG

mongodb c的驱动封装接口,封装采用c++的写法,支持增删改查的功能

以下是一个基本的MongoDB C++驱动封装接口,包括增删改查的功能:

#include <mongoc.h>

class MongoDB {
public:
    MongoDB(const std::string& uri_str, const std::string& db_name)
        : client_{mongoc_client_new(uri_str.c_str())},
          db_{mongoc_client_get_database(client_, db_name.c_str())} {}

    ~MongoDB() {
        mongoc_database_destroy(db_);
        mongoc_client_destroy(client_);
    }

    bool insert(const std::string& collection_name, const bson_t* doc) {
        mongoc_collection_t* coll = mongoc_client_get_collection(client_, db_name_.c_str(), collection_name.c_str());
        bson_error_t error;
        bool success = mongoc_collection_insert_one(coll, doc, nullptr, nullptr, &error);
        if (!success) {
            // handle error
            return false;
        }
        return true;
    }

    bool update(const std::string& collection_name, const bson_t* filter, const bson_t* update) {
        mongoc_collection_t* coll = mongoc_client_get_collection(client_, db_name_.c_str(), collection_name.c_str());
        bson_error_t error;
        bool success = mongoc_collection_update_one(coll, filter, update, nullptr, &error);
        if (!success) {
            // handle error
            return false;
        }
        return true;
    }

    bool remove(const std::string& collection_name, const bson_t* filter) {
         mongoc_collection_t* coll = mongoc_client_get_collection(client_, db_name_.c_str(), collection_name.c_str());
         bson_error_t error;
         bool success = mongoc_collection_delete_one(coll, filter, nullptr, &error);
         if (!success) {
             // handle error
             return false;
         }
         return true;
    }

    mongoc_cursor_t* query(const std::string& collection_name, const bson_t* filter) {
        mongoc_collection_t* coll = mongoc_client_get_collection(client_, db_name_.c_str(), collection_name.c_str());
        return mongoc_collection_find_with_opts(coll, filter, nullptr, nullptr);
    }

private:
    mongoc_client_t* client_;
    mongoc_database_t* db_;
};

使用时,可以先创建一个MongoDB对象,并传入URI字符串和数据库名称:

std::string uri_str = "mongodb://localhost:27017";
std::string db_name = "test";
MongoDB mongo{uri_str, db_name};

然后就可以进行增删改查操作了。例如插入一个文档:

bson_t doc;
bson_init(&doc);
BSON_APPEND_UTF8(&doc, "name", "Alice");
BSON_APPEND_INT32(&doc, "age", 25);

mongo.insert("users", &doc);
bson_destroy(&doc);

查询所有文档并遍历输出结果:

mongoc_cursor_t* cursor = mongo.query("users", nullptr);
const bson_t* doc;

while (mongoc_cursor_next(cursor, &doc)) {
    char* str = bson_as_json(doc, nullptr);
    std::cout << str << std::endl;
    bson_free(str);
}

mongoc_cursor_destroy(cursor);

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=6081

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?