1. 什么是MongoDB?
MongoDB是一种基于分布式文件存储的数据库系统,可以存储非结构化数据。与传统的关系型数据库不同,MongoDB采用的是文档存储的方式,数据存储形式类似于JSON格式。MongoDB是当前流行的NoSQL数据库之一,在Web应用开发中得到广泛的应用。
2. C语言操作MongoDB
要使用C语言操作MongoDB,我们需要使用mongodb-c-driver,这是MongoDB官方提供的C语言驱动。
2.1 安装mongodb-c-driver
安装mongodb-c-driver非常简单,在Linux系统下,只需要使用apt-get命令即可:
sudo apt-get install libmongoc-dev
在Windows系统下,可以在MongoDB官网上下载对应版本的驱动包,然后进行安装。
2.2 连接MongoDB
在C语言中,使用mongoc_client_t结构体来表示MongoDB客户端,我们可以通过mongoc_uri_t对象来创建客户端。
mongoc_client_t *client;
mongoc_uri_t *uri;
uri = mongoc_uri_new("mongodb://localhost:27017/");
client = mongoc_client_new_from_uri(uri);
mongoc_uri_destroy(uri);
以上代码表示创建一个客户端,并连接到本地的MongoDB服务器,uri参数表示MongoDB的连接地址。
如果需要验证连接,可以在uri中添加用户名和密码:
uri = mongoc_uri_new_with_error("mongodb://user:password@localhost:27017/");
mongoc_client_t *client;
mongoc_uri_destroy(uri);
client = mongoc_client_new("mongodb://user:password@localhost:27017/");
2.3 插入数据
使用mongoc_collection_insert函数可以向MongoDB数据库中插入一条数据。
#include
#include
void insert_data(mongoc_client_t* client) {
bson_error_t error;
bson_t* data = bson_new ();
bson_append_utf8 (data,"name",-1,"张三",-1);
bson_append_int32 (data,"age",-1,22);
bson_append_utf8 (data,"phone",-1,"1234567890",-1);
mongoc_collection_t *collection =mongoc_client_get_collection (client,"testdb","testcollection");
bool getResult =mongoc_collection_insert(collection,MONGOC_INSERT_NONE,data,NULL,&error);
if(!getResult)
fprintf(stderr, "Failed to insert data: %s \n", error.message);
bson_destroy(data);
mongoc_collection_destroy(collection);
}
以上代码表示向testdb数据库的testcollection集合中插入一条数据,数据格式为name、age、phone。(mongoc_collection_insert函数的第二个参数表示插入的数据,第三个参数表示插入选项,第四个参数为bson_error_t,如果插入失败,则按照错误信息打印错误消息。)
2.4 查询数据
使用mongoc_cursor_t对象可以进行MongoDB的查询操作,通过mongoc_collection_find_with_opts函数可以得到查询结果的游标。
void query_data(mongoc_client_t* client) {
bson_t* query =bson_new ();
mongoc_collection_t *collection =mongoc_client_get_collection(client,"testdb","testcollection");
mongoc_cursor_t *cursor= mongoc_collection_find_with_opts(collection,query,NULL,NULL);
const bson_t *doc;
while(mongoc_cursor_next(cursor,&doc)){
char * jsonStr = bson_as_json(doc, NULL);
printf("%s\n",jsonStr);
bson_free(jsonStr);
}
bson_destroy(query);
mongoc_cursor_destroy(cursor);
mongoc_collection_destroy(collection);
}
以上代码表示查询testdb数据库的testcollection集合中的所有数据。
2.5 更新数据
使用mongoc_collection_update_with_opts函数可以对MongoDB中的数据进行更新操作。
void update_data(mongoc_client_t* client) {
bson_t* query =bson_new ();
bson_append_utf8 (query,"name",-1,"张三",-1);
mongoc_collection_t *collection =mongoc_client_get_collection(client,"testdb","testcollection");
bson_t* updateData =bson_new ();
bson_t* updateValue =bson_new ();
bson_append_utf8(updateValue,"name",-1,"李四",-1);
bson_append_int32(updateData,"$set",4,updateValue);
bool getResult =mongoc_collection_update_with_opts(collection,query,updateData,NULL,NULL);
if(!getResult)
fprintf(stderr, "Failed to update data: %s \n", error.message);
bson_destroy(query);
bson_destroy(updateData);
mongoc_collection_destroy(collection);
}
以上代码表示将testdb数据库的testcollection中name为“张三”的数据修改为name为“李四”。
2.6 删除数据
使用mongoc_collection_remove_with_opts函数可以对MongoDB中的数据进行删除操作。
void delete_data(mongoc_client_t* client) {
bson_t* query =bson_new ();
bson_append_utf8 (query,"name",-1,"张三",-1);
mongoc_collection_t *collection =mongoc_client_get_collection (client,"testdb","testcollection");
bool getResult =mongoc_collection_remove_with_opts(collection,query,NULL,NULL);
if(!getResult)
fprintf(stderr, "Failed to delete data: %s \n", error.message);
bson_destroy(query);
mongoc_collection_destroy(collection);
}
以上代码表示将testdb数据库的testcollection中name为“张三”的数据进行删除。
3. 总结
C语言对MongoDB的操作并不困难,通过使用mongodb-c-driver,我们可以轻松地连接MongoDB数据库,并通过简单的API完成数据的增、删、改、查等操作。掌握了C语言操作MongoDB的基础知识,对于Web应用开发的人来说是非常重要的一项技能。