mongodb-c-driver使用详解----windows环境

    网上的各种资源,无法正常编译出windows环境下的lib、dll文件库文件,只好自己动手,翻看官方文档,没想到官方的操作指引,也是不能达到预期,只好自己琢磨。为方便以后使用,整理成文档如下

一、介绍

     MongoDB C Driver也常被写成“libmongoc”、“mongodb-c-driver”,是MongoDB官方C语言客户端库,用于和MongoDB交互。

       当处理DSON数据时(MongoDB的二进制数据) mongodb-c-driver依赖于libbson

二、编译

依赖cmake工具编译,所以,先安装好cmake,配置好cmake环境变量,自行百度。

然后下载源码:

源码官方获取渠道:http://mongoc.org/

github: https://github.com/mongodb/mongo-c-driver

此文档所用版本为:mongo-c-driver-1.16.2

 

下载后,解压,打开命令行,cd进入根目录以下为命令 (我的解压目录为:“D:\应用程序\MongoDb\mongo-c-driver\mongo-c-driver-1.16.2x86”)

官方指导文档上的方法不可行,请按以下方法操作

cd /d D:\应用程序\MongoDb\mongo-c-driver\mongo-c-driver-1.16.2x86

 

cmake -G "Visual Studio 10 2010" "-DCMAKE_INSTALL_PREFIX=C:\mongo-c-driver" "-DCMAKE_PREFIX_PATH=C:\mongo-c-driver"

mongodb-c-driver使用详解----windows环境

 

到根目录下查看,发现生成了.sln文件,用VS打开,会发现一大堆工程,先编译以下圏红工程:

mongodb-c-driver使用详解----windows环境

编译成功后,再执行安装工程,提取出lib、dll、头文件等:

mongodb-c-driver使用详解----windows环境

你会发现,在C:\mongo-c-driver目录下生成了以下文件:

mongodb-c-driver使用详解----windows环境

到此,编译完成,下面说几个注意点:

mongodb-c-driver使用详解----windows环境

“10 2010”字样,是针对不同版本的VS,可以自行选择。x64版本的,“10 2010”应该写成“10 2010 Win64”,默认是x86版本。备选项有:

mongodb-c-driver使用详解----windows环境

 

       而“C:\mongo-c-driver”为生成开发文件的路径,可自行修改。

 

       针对不同的VS版本,按以上方法自行编译不同的版本

 

三、使用

官方使用说明:http://mongoc.org/libmongoc/current/visual-studio-guide.html

创建个win32控制台程序

mongodb-c-driver使用详解----windows环境mongodb-c-driver使用详解----windows环境转存失败重新上传取消mongodb-c-driver使用详解----windows环境

 

选择你对应和版本,注意别选错了,不然你会抓狂:

mongodb-c-driver使用详解----windows环境

 

在工程名中,右键菜单==》properties:

mongodb-c-driver使用详解----windows环境

C:\mongo-c-driver\include\libbson-1.0

C:\mongo-c-driver\include\libmongoc-1.0

设置成正确的路径即可,以上为参考。

 

设置lib文件库路径:

C:\mongo-c-driver\lib\bson-1.0.lib

C:\mongo-c-driver\lib\mongoc-1.0.lib

 

mongodb-c-driver使用详解----windows环境

设置动态库的路径:

PATH=c:/mongo-c-driver/bin

mongodb-c-driver使用详解----windows环境

 

最后引入头文件

#include <mongoc/mongoc.h>

 

写一段测试代码:

int _tmain(int argc, _TCHAR* argv[])

{

       mongoc_client_t *client;

       mongoc_collection_t *collection;

       mongoc_cursor_t *cursor;

       bson_error_t error;

       const bson_t *doc;

       const char *collection_name = "test";

       bson_t query;

       char *str;

       const char *uri_string = "mongodb://127.0.0.0/?appname=client-example";

       mongoc_uri_t *uri;

 

       mongoc_init ();

 

       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;

       }

 

       client = mongoc_client_new_from_uri (uri);

       if (!client) {

              return EXIT_FAILURE;

       }

 

       mongoc_client_set_error_api (client, 2);

 

       bson_init (&query);

 

#if 0

       bson_append_utf8 (&query, "hello", -1, "world", -1);

#endif

 

       collection = mongoc_client_get_collection (client, "test", 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;

}

 

官方教程:

http://mongoc.org/libmongoc/current/tutorial.html#installing

开发手册:http://mongoc.org/libmongoc/current/guides.html

API手册:http://mongoc.org/libmongoc/current/api.html

 

四、监控

可以监控MongoDB所有事件,待续…

官方教程:http://mongoc.org/libmongoc/current/application-performance-monitoring.html