CentOS7.5下使用Docker安装MongoDB及C使用mongo-c-driver-1.18.0操作MongoDB

1 Docker安装MongoDB及简单使用

安装镜像参考:https://www.runoob.com/docker/docker-install-mongodb.html.
1、docker下载MongoDB镜像:docker pull mongo
在这里插入图片描述
2、查看镜像:docker images
在这里插入图片描述
3、运行容器:docker run -itd --name mongo -p 27017:27017 mongo --auth
在这里插入图片描述
4、查看容器运行信息:docker ps -a
在这里插入图片描述
5、登录MongoDB并且创建用户名密码及简单使用:
(1)登录MongoDB:docker exec -it mongo mongo admin
在这里插入图片描述
(2)创建用户名密码:db.createUser({ user:‘admin’,pwd:‘123456’,roles:[ { role:‘userAdminAnyDatabase’, db: ‘admin’},“readWriteAnyDatabase”]});
在这里插入图片描述
(3)使用用户名密码认证:db.auth(‘admin’, ‘123456’)
在这里插入图片描述
(4)查看所有数据库:show dbs
在这里插入图片描述
(5)创建数据库(test不存在则自动创建):use test
在这里插入图片描述
(6)插入两条文档自动创建数据集user:
db.user.insert({name: ‘zhangsan’, age: ‘20’});
db.user.insert({name: ‘lisi’, age: ‘20’});
(7)查询user数据集文档:db.user.find().pretty()
(8)通过limit查询指定数量的文档:db.user.find().limit(1).pretty()
在这里插入图片描述

(9)修改数据集:db.user.update({‘name’:‘zhangsan’},{$set:{‘age’:‘50’}})
(10)查询修改后的user数据集:db.user.find().pretty()
在这里插入图片描述
(11)删除文档:db.user.remove({‘name’:‘zhangsan’})
在这里插入图片描述
(12)查看所有数据集:show collections
(13)删除指定数据集:db.user.drop()
在这里插入图片描述

2 C使用mongo-c-driver-1.18.0操作MongoDB

2.1mongo-c-driver-1.18.0驱动安装

因为我们使用的是最新版本的MongoDB5.0,所以需要安装1.18版本的驱动,Github上下载源码手工编译安装驱动。

驱动源码方式安装参考:http://mongoc.org/libmongoc/current/installing.html
$ wget https://github.com/mongodb/mongo-c-driver/releases/download/1.18.0/mongo-c-driver-1.18.0.tar.gz
$ tar xzf mongo-c-driver-1.18.0.tar.gz
$ cd mongo-c-driver-1.18.0
$ mkdir cmake-build
$ cd cmake-build
$ cmake -DENABLE_AUTOMATIC_INIT_AND_CLEANUP=OFF …

1、执行cmake提示需要CMake 3.1以上版本,所以下载安装CMake3:yum install -y cmake3
在这里插入图片描述
2、cmake -DENABLE_AUTOMATIC_INIT_AND_CLEANUP=OFF …需要改为(cmake改为cmake3)cmake3 -DENABLE_AUTOMATIC_INIT_AND_CLEANUP=OFF …

3、编译时提示需要OpenSSL依赖,所以需要安装OpenSSL:yum install openssl openssl-devel
错误信息如下:
在这里插入图片描述
4、编译成功后信息如下:
在这里插入图片描述
5、继续执行make编译,编译成功信息如下:
在这里插入图片描述

6、安装make install,安装成功信息如下:
libbson-1.0信息如下:
头文件目录:/usr/local/include/libbson-1.0/
动态库目录:/usr/local/lib64/
在这里插入图片描述
libmongoc-1.0信息如下:
头文件目录:/usr/local/include/libmongoc-1.0/
动态库目录:/usr/local/lib64/
在这里插入图片描述

2.2C语言操作MongoDB简单示例

参考mongo-c-driver-1.18.0/src/libmongoc/examples/example-client.c

/* gcc mongo_test.c -I /usr/local/include/libmongoc-1.0/ -I /usr/local/include/libbson-1.0/ -o mongo_test -lmongoc-1.0 -lbson-1.0 */

/* ./mongo_test [CONNECTION_STRING [DATABASE_NAME] [COLLECTION_NAME]] */

#include <mongoc.h>
#include <stdio.h>
#include <stdlib.h>

#define MONGO_DEFAULT_USERNAME     "admin"
#define MONGO_DEFAULT_PASSWORD     "123456"
#define MONGO_DEFAULT_HOST         "127.0.0.1"
#define MONGO_DEFAULT_PORT         "27017"
#define MONGO_DEFAULT_AUTH_SOURCE  "admin"
#define MONGO_DEFAULT_DATABASE     "test"
#define MONGO_DEFAULT_COLL		   "user"

#include <mongoc/mongoc.h>
#include <stdio.h>
#include <stdlib.h>

int
main(int argc, char* argv[])
{
	mongoc_client_t* client;
	mongoc_collection_t* collection;
	mongoc_cursor_t* cursor;
	bson_error_t error;
	const bson_t* doc;
	//默认数据库与数据集
	const char* database_name = MONGO_DEFAULT_DATABASE;
	const char* collection_name = MONGO_DEFAULT_COLL;
	bson_t query;
	char* str;
	char uri_default[128] = { 0 };
	//修改URI默认格式
	snprintf(uri_default, sizeof(uri_default), "mongodb://%s:%s@%s:%s/?authSource=%s", MONGO_DEFAULT_USERNAME, MONGO_DEFAULT_PASSWORD, MONGO_DEFAULT_HOST,
		MONGO_DEFAULT_PORT, MONGO_DEFAULT_AUTH_SOURCE);
	//const char* uri_string = "mongodb://127.0.0.1/?appname=client-example";
	const char* uri_string = uri_default;
	mongoc_uri_t* uri;

	mongoc_init();
	if (argc > 1) {
		uri_string = argv[1];
	}

	if (argc > 2) {
		database_name = argv[2];
	}

	if (argc > 3) {
		collection_name = argv[3];
	}

	uri = mongoc_uri_new_with_error(uri_string, &error);
	if (!uri) {
		fprintf(stderr,
			"failed to parse URI: %s\n"
			"error message:       %s\n",
			uri_string,
			error.message);
		return EXIT_FAILURE;
	}

	fprintf(stdout, "uri:<%s>,database_name:<%s>,collection_name:<%s>\n", uri_string, database_name, collection_name);

	client = mongoc_client_new_from_uri(uri);
	if (!client) {
		return EXIT_FAILURE;
	}

	mongoc_client_set_error_api(client, 2);

	bson_init(&query);
	collection = mongoc_client_get_collection(client, database_name, collection_name);
	cursor = mongoc_collection_find_with_opts(
		collection,
		&query,
		NULL,  /* additional options */
		NULL); /* read prefs, NULL for default */

	while (mongoc_cursor_next(cursor, &doc)) {
		str = bson_as_canonical_extended_json(doc, NULL);
		fprintf(stdout, "%s\n", str);
		bson_free(str);
	}

	if (mongoc_cursor_error(cursor, &error)) {
		fprintf(stderr, "Cursor Failure: %s\n", error.message);
		return EXIT_FAILURE;
	}

	bson_destroy(&query);
	mongoc_cursor_destroy(cursor);
	mongoc_collection_destroy(collection);
	mongoc_uri_destroy(uri);
	mongoc_client_destroy(client);
	mongoc_cleanup();

	return EXIT_SUCCESS;
}

1、编译:gcc mongo_test.c -I /usr/local/include/libmongoc-1.0/ -I /usr/local/include/libbson-1.0/ -o mongo_test -lmongoc-1.0 -lbson-1.0
2、将libbson与libmongoc依赖库拷贝到/lib64/目录下,因为/usr/local/lib64/不是动态库默认搜索路径
cp -a /usr/local/lib64/libbson* /lib64/
cp -a /usr/local/lib64/libmongoc* /lib64/
3、重新添加几条数据测试
db.user.insert({name: ‘zhangsan’, age: ‘20’});
db.user.insert({name: ‘lisi’, age: ‘20’});
db.user2.insert({name: ‘zhangsan’, age: ‘20’});
在这里插入图片描述
4、默认执行:./mongo_test
在这里插入图片描述
5、指定参数(URI、数据库名称、数据集名称)执行:./mongo_test mongodb://admin:123456@127.0.0.1:27017/?authSource=admin test user2
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值