mongdb数据库部署

环境:

应用场景:检测模型检测出的异常图片,需要存档记录,方便后期查询修改.由于存储的数据中有图片,当时采用二进制数据格式存储的,你也可以存储图片的URL路径.因此,使用mongdb数据库,将数据存到磁盘.本篇文章是自己在项目中用到的技术点.
1.ubuntu(PC和Jetson nano)
2.mongodb c语言驱动
3.使用到的客户端程序:nosqlbooster4mongo-5.2.12.AppImage

数据库的基本工能是增删改查,文件存储格式为BSON(一种JSON的扩展)。存储在集合中的文档,被存储为键-值对的形式。键用于唯一标识一个文档,为字符串类型,而值则可以是各中复杂的文件类型。我们称这种存储形式为BSON(Binary Serialized dOcument Format)。
GridFS是Mongo的一个子模块,使用GridFS可以基于MongoDB来持久存储文件。并且支持分布式应用(文件分布存储和读取)。作为MongoDB中二进制数据存储在数据库中的解决方案,通常用来处理大文件,对于MongoDB的BSON格式的数据(文档)存储有尺寸限制,最大为16M。但是在实际系统开发中,上传的图片或者文件可能尺寸会很大,此时我们可以借用GridFS来辅助管理这些文件。

安装mongdb数据库服务

第1步 – 导入公钥:sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5
第2步 – 创建源列表文件MongoDB:echo “deb http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse” | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list
第3步 – 更新存储库:sudo apt-get update
第4步 – 安装MongoDB:sudo apt-get install -y mongodb-org

启动MongoDB并将其添加为在启动时启动的服务:systemctl start mongod systemctl enable mongod
用netstat命令检查MongoDB是否已经在端口27017上启动:netstat -plntu

安装mongodb c驱动

由于考虑到兼容性问题,
第1步:git clone https://github.com/mongodb/mongo-c-driver.git
第2步:cd mongo-c-driver
第3步:git checkout x.y.z # To build a particular release
第4步:python build/calc_release_version.py > VERSION_CURRENT
第5步:mkdir cmake-build , cd cmake-build
第6步:cmake -DENABLE_AUTOMATIC_INIT_AND_CLEANUP=OFF …
第7步:sudo make install

mongo基本命令:

1>.进入控制台界面:mongo
2>.显示mongodb中有哪些数据库:show dbs;显示当前正在使用的数据库:db;选择使用的数据库(不存在就创建):use runoob
3>.创建数据库:use runoob,db.runoob.insert({“name”:“菜鸟教程”}),show dbs(在 MongoDB 中,集合只有在内容插入后才会创建! 就是说,创建集合(数据表)后要再插入一个文档(记录),集合才会真正创建。)
4>.删除数据库:use runoob,db.dropDatabase()
5>.集合操作:use runoob,db.createCollection(“runoob”),show tables/show collections, db.runoob.drop()
6>.创建集合:db.createCollection(“mycol”, { capped : true, autoIndexId : true, size : 6142800, max : 10000 }) capped如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。当该值为 true 时,必须指定 size 参数。
7>.删除集合:show collections,db.mycol.drop()
8>.插入文档:use runoob,show tables/show collections, db.col.insert({“key”:“vvv”}) (往col集合/表里面插入数据,如果col不存在,则创建)
9>.查看文档:db.col.find() / db.runoob.find().pretty(),更新文档:db.runoob.update({‘name’:‘菜鸟教程’},{KaTeX parse error: Expected 'EOF', got '}' at position 28: …:'MongoDB2222'}}̲) db.col…or:[{“name”:“333333”},{“name”: “1111111”}]})

设置mongodb数据库对外访问

步骤(一般都是在局域网内访问):
1.vim /etc/mongod.conf(这mongdb的配置文件,修改完记得重启mongdb服务.里面还可以修改数据库存储地址)
2.bindIp: 127.0.0.1 ==> bindIp: 0.0.0.0
3.sudo systemctl restart mongod.service
4.lsof -i -n | grep -i “listen”

远程连接:mongodb:mongo --host 192.168.51.56 --port 27017
//由于保密性原因,只给出部分测试代码.
//cpp代码

CMongo::CMongo()
{
    memset(&m_ConnectInfo, 0, sizeof(m_ConnectInfo));
    m_pClient = nullptr;
    m_pDataBase = nullptr;
    mongoc_init();
}

CMongo::~CMongo()
{
    mongoc_cleanup();
}

//初始化数据库连接信息
bool CMongo::Init(const tagConnectInfo& connect_info)
{
    memcpy(&m_ConnectInfo, &connect_info, sizeof(m_ConnectInfo));
    return Connect();
}

//释放数据库连接信息
bool CMongo::Release()
{
    Disconnect();
    memset(&m_ConnectInfo, 0, sizeof(m_ConnectInfo));
    return true;
}

//获取所有集合
bool CMongo::GetAllCollection(std::vector<std::string> &collection_name_list)
{
    //校验连接
    if (!Connect()) return false;

    //获取集合
    mongoc_cursor_t * cursor = mongoc_database_find_collections_with_opts(m_pDataBase, nullptr);
    const bson_t * doc = nullptr;
    while (mongoc_cursor_next(cursor, &doc))
    {
        if (0)
        {
            char * str = bson_as_canonical_extended_json(doc, nullptr);
            printf("\n\n%s\n\n", str);
            bson_free(str);
        }
        else
        {
            bson_iter_t iter;
            bson_iter_init(&iter, doc);
            if (bson_iter_find(&iter, "name"))
            {
                collection_name_list.push_back(bson_iter_utf8(&iter, nullptr));
            }
        }
    }

    //错误检查
    bson_error_t error;
    if (mongoc_cursor_error(cursor, &error))
    {
        printf("get collection list failed, error message: %s\n", error.message);
        mongoc_cursor_destroy(cursor);
        return false;
    }

    //释放资源
    mongoc_cursor_destroy(cursor);
    return true;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值