zoukankan      html  css  js  c++  java
  • MongoDB C Driver Building on Windows

    一、编译mongodb c driver:

      需要先安装OpenSSL:(参见:http://bbs.aircheng.com/read-2222-1)

      步骤:(MongoDB不需要授权登陆的话,就不需要OpenSSL,直接跳到第11

        1.下载ActivePerl  5.24.0.2400 
         http://www.activestate.com/activeperl/downloads

        2.安装ActivePerl软件 
         没什么好说的,一步一步安装即可。安装成功后,设置环境变量。 
         例如我将ActivePerl安装在C:Perl64目录下,则选中Path,单击编辑按钮,

         将C:Perl64sitein;C:Perl64in;加入其中,确认即可。

         运行”CMD“命令,使用cd命令将运行目录指向perl安装目录的eg文件夹,

         执行“perl example.pl”若显示“Hello from ActivePerl!”,则说明Perl安装成功,

         可以开始使用Perl的相关命令来进行OpenSSL的安装了。 

        3.安装Microsoft Visual Studio 2010 
         将C:Program Files (x86)Microsoft Visual Studio 10.0VCinamd64;

         加入系统环境变量,具体以你安装的路径为准,

         注意(64位)是 binamd64; 不是 bin; 多么痛的领悟。

        4.安装NASM 
         http://www.nasm.us/ 

         当前稳定版本为:2.12.02 
         http://www.nasm.us/pub/nasm/releasebuilds/2.12.02/win64/ 
         

        将nasm的路径添加至环境变量
        例如我的nasm安装在 C:UserslenovoAppDataLocalNASM 目录

        

        5.下载OpenSSL 
         https://www.openssl.org/source/ 

         下载后,将其解压缩至C:openssl目录下,这样做便于后续操作

         注意目录结构,不要出现openssl-1.1.0c子目录,

         而是将openssl-1.1.0c目录下的文件拷贝至C:openssl目录下 

        6.初始化编译环境 
         因为Visual Studio 2010安装在目录中C:Program Files (x86)Microsoft Visual Studio 10.0 
         这里使用的是在Visual Studio Tools文件夹下的Visual Studio x64 Win64命令提示(2010)工具。 
       然后右键:以管理员身份运行
         

         进入Visual Studio 2010安装目录 C:Program Files (x86)Microsoft Visual Studio 10.0中 
         执行命令:cd C:Program Files (x86)Microsoft Visual Studio 10.0VCinamd64 
         执行命令:vcvars64.bat 

     

         7.openssl的源文件已解压至C:openssl的目录中,下面开始执行Configure 
          进入openssl 目录下执行 perl Configure VC-WIN64A 
           

          执行结束后,如下图所示 
          

           8.执行命令:nmake 
           

          如果执行成功,则等待输入下一个命令 

           

          9.执行命令:nmake test 

           

          很顺利的情况下: 
          

          

          10.执行命令:nmake install 
           

          当出现下面页面的时候,证明你已成功: 
          

          11.编译驱动:

             http://mongoc.org/libmongoc/(api 官方文档)

           https://github.com/mongodb/mongo-c-driver(GitHub驱动源码,这个 src/libbson 文件夹里面是空的)

           驱动源码下载:https://github.com/mongodb/mongo-c-driver/releases 

           build前需下载个最新的cmake安装。

           

            


    编译完成之后在c:mongo-c-driver目录下有bin、include、lib三个文件夹,分别包含所需的dll、.h文件、lib。

    在自己的项目中引入这些.h文件、lib、dll就可以使用 C API 了。

    二、C API 的使用

    #include "mongoc.h"

    1.连接MongoDB:

    //只能调用一次mongoc_init
    mongoc_init();
    
    const char *uristr = "mongodb://user:pwd@host:port/";
    
    //MongoDB不需要登录认证的话,连接字符串中的用户名:密码@可以省略。
    
    //connection to MongoDB.
    m_client = mongoc_client_new (uristr);
    
    if (!m_client) 
    {
    	return false;
    }
    
    m_pCollection = mongoc_client_get_collection(m_client, "myDatabase", "mycollection");
    return true;
    

      

    2.Insert操作:

    bson_t query;
    
    bson_init(&query);
    BSON_APPEND_UTF8(&query,"name","chunxiao");
    BSON_APPEND_INT32(&query,"age",NULL);
    BSON_APPEND_DOUBLE(&query,"Price",66.0);
    if (!mongoc_collection_insert(m_pCollection,MONGOC_INSERT_NONE,&query,NULL,&error))
    {
      AfxMessageBox(error.message);
    }
    bson_destroy(&query);
    return true;
    

      

    3.Find操作:

    double age1 = 20;
    double age2 = 22;
    char	name[10] = "chunxiao";
    int sex = 0;
    
    bson_init(&query);
    bson_append_document_begin(&query,"age",3,&child);
    bson_append_double(&child,"$gt",3,age1);
    bson_append_document_end(&query,&child);
    
    bson_append_document_begin(&query,"age",3,&child1);
    bson_append_double(&child1,"$lte",4,age2);
    bson_append_document_end(&query,&child1);
    
    cursor = mongoc_collection_find(m_pCollection,MONGOC_QUERY_NONE,0,0,0,&query,NULL,NULL);
    vector<string> vData;
    while (mongoc_cursor_next(cursor,&docFind))
    {
    	//方法一
    	bson_iter_t iter;
    	bson_iter_init(&iter,docFind);
    	if (bson_iter_find(&iter,"name"))
    	{
    	  strcpy(str,bson_iter_utf8(&iter,NULL));
    	  strtest = bson_iter_utf8(&iter,NULL);
    	  if (strcmp(strtest.c_str(),"xiaochun")==0)
    	  {
    		  AfxMessageBox(str);
    		  continue;
    	  }
    	  strtest = strtest.substr(strtest.find_first_of("x"),2);
    	  AfxMessageBox(str);
    	}
    	bson_iter_init(&iter,docFind);//顺序不一致的话,要重新初始化一下 iter,否则find不到
    	if (bson_iter_find(&iter,"age"))
    	{
    	  int f = bson_iter_int32(&iter);
    	  sprintf(str,"%d",f);
    	  AfxMessageBox(str);
    	}
    	
    	//方法二
    	char *str;
        str = bson_as_json(docFind, NULL);
        vData.push_back(str);
    }
    
    if (mongoc_cursor_error(cursor, &error))//mongoc_cursor_error 要在 mongoc_cursor_next 之后调用,否则获取不到 error.message
    {
    	cout << "An error occurred:" << error.message << endl;
      mongoc_cursor_destroy(cursor);
      bson_destroy(&query);
      return false;
    }
    
    mongoc_cursor_destroy(cursor);
    bson_destroy(&query);
    
    return true;
     
    

      

    4.Delete操作:

    double age = 21;
    bson_init(&query);
    bson_append_document_begin(&query,"age",3,&child);
    bson_append_double(&child,"$gt",3,age);
    bson_append_document_end(&query,&child);
    BSON_APPEND_UTF8(&query,"name","chun.xiao");
    if (!mongoc_collection_remove(m_pCollection,MONGOC_REMOVE_NONE,&query,NULL,&error))
    {
      AfxMessageBox(error.message);
    }
    bson_destroy(&query);
    return true;
    

      

    5.UpDate操作:

    bson_init(&query);
    BSON_APPEND_UTF8(&query,"name","chunxiao");
    
    bson_t *docUpDate = bson_new();
    
    bson_append_document_begin(docUpDate,"$set",-1,&child);
    BSON_APPEND_UTF8(&child,"name","xiaochun");
    bson_append_document_end(docUpDate,&child);
    
    bson_init(&child);
    bson_append_document_begin(docUpDate,"$set",-1,&child);
    BSON_APPEND_UTF8(&child,"age","21");
    bson_append_document_end(docUpDate,&child);
    
    if (!mongoc_collection_update(m_pCollection,MONGOC_UPDATE_NONE,&query,docUpDate,NULL,&error))
    {
      AfxMessageBox(error.message);
    }
    bson_destroy(&query);
    bson_destroy(docUpDate);
    return true;
    

      

    百度云(13207134391):

      编译 C driver:

        MongoDBC API安装MongoDB以及编译 C driver

      Demo:

        MongoDBC APIC API 操作MongoDB

     

  • 相关阅读:
    elemen-ui表格多选,分页保持勾选状态的实现
    element-ui中的change事件传递多个参数的方法
    vue中访问不存在路由默认跳转404页面实现方法
    IntelliJ IDEA 汉化包
    vue 移动端项目用手机预览调试
    vue 中使用 rem
    vue中配置axios.js文件,发送请求
    vue中axios的使用
    爬楼梯
    不同路径
  • 原文地址:https://www.cnblogs.com/SZxiaochun/p/5848455.html
Copyright © 2011-2022 走看看