1. 程式人生 > 實用技巧 >MongoDB C驅動程式(libmongoc)(libbson)

MongoDB C驅動程式(libmongoc)(libbson)

最近用到MongoDB C驅動程式,網上資料較少,所以記錄分享。

一、簡介

  MongoDB C驅動程式(也稱為“ libmongoc”)是一個庫,用於C程式中操作MongoDB。

  官方下載地址:http://mongoc.org/

  百度雲分享:https://pan.baidu.com/s/1pqRje3zrh-mnEiMGr-ERlg提取碼:y5t1

  libmongoc庫:https://pan.baidu.com/s/16DF1qpxCTyp2oQmicjtiOw提取碼:z4yn

  libbson庫:https://pan.baidu.com/s/1di14LTcLTT_T2ta_e21lUg提取碼:f8o3

二、使用

  1、安裝並執行MongoDB

$ mongo --host localhost --port 27017
MongoDB shell version: 3.0.6
connecting to: localhost:27017/test
>

  2、C程式中包含libmongoc

#include <mongoc/mongoc.h>
#include <bson/bson.h>

  如果您不使用CMake或pkg-config,則可以手動管理路徑和庫。

$ gcc -o hello_mongoc hello_mongoc.c \
    -I/usr/local/include/libbson-1.0
-I/usr/local/include/libmongoc-1.0 \ -lmongoc-1.0 -lbson-1.0 $ ./hello_mongoc { "ok" : 1.000000 }

  3、建立連線

#include <mongoc/mongoc.h>

int main(int argc, char *argv[])
{
   const char *uri_string = "mongodb://localhost:27017";
   mongoc_uri_t *uri;
   mongoc_client_t *client;
   mongoc_database_t *database;
   mongoc_collection_t 
*collection; bson_t *command, reply, *insert; bson_error_t error; char *str; bool retval; /* * Required to initialize libmongoc's internals */ mongoc_init (); /* * Optionally get MongoDB URI from command line */ if (argc > 1) { uri_string = argv[1]; } /* * Safely create a MongoDB URI object from the given string */ 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; } /* * Create a new client instance */ client = mongoc_client_new_from_uri (uri); if (!client) { return EXIT_FAILURE; } /* * Register the application name so we can track it in the profile logs * on the server. This can also be done from the URI (see other examples). */ mongoc_client_set_appname (client, "connect-example"); /* * Get a handle on the database "db_name" and collection "coll_name" */ database = mongoc_client_get_database (client, "db_name"); collection = mongoc_client_get_collection (client, "db_name", "coll_name"); /* * Do work. This example pings the database, prints the result as JSON and * performs an insert */ command = BCON_NEW ("ping", BCON_INT32 (1)); retval = mongoc_client_command_simple ( client, "admin", command, NULL, &reply, &error); if (!retval) { fprintf (stderr, "%s\n", error.message); return EXIT_FAILURE; } str = bson_as_json (&reply, NULL); printf ("%s\n", str); insert = BCON_NEW ("hello", BCON_UTF8 ("world")); if (!mongoc_collection_insert_one (collection, insert, NULL, NULL, &error)) { fprintf (stderr, "%s\n", error.message); } bson_destroy (insert); bson_destroy (&reply); bson_destroy (command); bson_free (str); /* * Release our handles and clean up libmongoc */ mongoc_collection_destroy (collection); mongoc_database_destroy (database); mongoc_uri_destroy (uri); mongoc_client_destroy (client); mongoc_cleanup (); return EXIT_SUCCESS; }

三、常用介面

  1、mongoc_collection_t * mongoc_client_new (const char *uri_string);

  使用提供的URI字串建立一個新的mongoc_client_t

  引數
    uri_string:包含MongoDB連線URI的字串。
  返回
    如果URI成功解析,則為新分配的mongoc_client_t,否則為NULL。

  2、mongoc_collection_t * mongoc_client_get_collection (mongoc_client_t *client,const char *db,const char *collection);

  引數

    client:一個mongoc_client_t

    db:包含集合的資料庫的名稱。

    collection:集合的名稱。

  返回

    新分配的mongoc_collection_t當不再使用時應使用mongoc_collection_destroy()釋放它。

  3、mongoc_cursor_t * mongoc_collection_find_with_opts (mongoc_collection_t * collection,

                                  const bson_t * filter,

                                  const bson_t * opts,

                           const mongoc_read_prefs_t* read_prefs)

  

  引數
    collection:一個mongoc_collection_t。
    filter:bson_t包含要執行的查詢的。
    opts:bson_t查詢選項,包括排序順序和要返回的欄位。可以NULL。
    read_prefs:mongoc_read_prefs_t或NULL。

  返回
    新分配的mongoc_cursor_t,必須使用mongoc_cursor_destroy()釋放。