MongoDB C驱动程序(libmongoc)(libbson)
<p>最近用到MongoDB C驱动程序,网上资料较少,所以记录分享。</p><p><strong>一、简介</strong></p>
<p> MongoDB C驱动程序(也称为“ libmongoc”)是一个库,用于C程序中操作MongoDB。</p>
<p> 官方下载地址:http://mongoc.org/</p>
<p> 百度云分享:https://pan.baidu.com/s/1pqRje3zrh-mnEiMGr-ERlg 提取码:y5t1</p>
<p> libmongoc库:https://pan.baidu.com/s/16DF1qpxCTyp2oQmicjtiOw 提取码:z4yn</p>
<p> libbson库:https://pan.baidu.com/s/1di14LTcLTT_T2ta_e21lUg 提取码:f8o3</p>
<p><strong>二、使用</strong></p>
<p> 1、安装并运行MongoDB</p>
<div class="cnblogs_code">
<pre>$ mongo --host localhost --port <span style="color: rgba(128, 0, 128, 1)">27017</span><span style="color: rgba(0, 0, 0, 1)">
MongoDB shell version: </span><span style="color: rgba(128, 0, 128, 1)">3.0</span>.<span style="color: rgba(128, 0, 128, 1)">6</span><span style="color: rgba(0, 0, 0, 1)">
connecting to: localhost:</span><span style="color: rgba(128, 0, 128, 1)">27017</span>/<span style="color: rgba(0, 0, 0, 1)">test
</span>></pre>
</div>
<p> 2、C程序中包含libmongoc</p>
<div class="cnblogs_code">
<pre>#include <mongoc/mongoc.h><span style="color: rgba(0, 0, 0, 1)">
#include </span><bson/bson.h></pre>
</div>
<p> 如果您不使用CMake或pkg-config,则可以手动管理路径和库。</p>
<div class="cnblogs_code">
<pre>$ gcc -<span style="color: rgba(0, 0, 0, 1)">o hello_mongoc hello_mongoc.c \
</span>-I/usr/local/include/libbson-<span style="color: rgba(128, 0, 128, 1)">1.0</span> -I/usr/local/include/libmongoc-<span style="color: rgba(128, 0, 128, 1)">1.0</span><span style="color: rgba(0, 0, 0, 1)"> \
</span>-lmongoc-<span style="color: rgba(128, 0, 128, 1)">1.0</span> -lbson-<span style="color: rgba(128, 0, 128, 1)">1.0</span><span style="color: rgba(0, 0, 0, 1)">
$ .</span>/<span style="color: rgba(0, 0, 0, 1)">hello_mongoc
{ </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">ok</span><span style="color: rgba(128, 0, 0, 1)">"</span> : <span style="color: rgba(128, 0, 128, 1)">1.000000</span> }</pre>
</div>
<p> 3、建立连接</p>
<div class="cnblogs_code">
<pre>#include <mongoc/mongoc.h>
<span style="color: rgba(0, 0, 255, 1)">int</span> main(<span style="color: rgba(0, 0, 255, 1)">int</span> argc, <span style="color: rgba(0, 0, 255, 1)">char</span> *<span style="color: rgba(0, 0, 0, 1)">argv[])
{
</span><span style="color: rgba(0, 0, 255, 1)">const</span> <span style="color: rgba(0, 0, 255, 1)">char</span> *uri_string = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">mongodb://localhost:27017</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
mongoc_uri_t </span>*<span style="color: rgba(0, 0, 0, 1)">uri;
mongoc_client_t </span>*<span style="color: rgba(0, 0, 0, 1)">client;
mongoc_database_t </span>*<span style="color: rgba(0, 0, 0, 1)">database;
mongoc_collection_t </span>*<span style="color: rgba(0, 0, 0, 1)">collection;
bson_t </span>*command, reply, *<span style="color: rgba(0, 0, 0, 1)">insert;
bson_error_t error;
</span><span style="color: rgba(0, 0, 255, 1)">char</span> *<span style="color: rgba(0, 0, 0, 1)">str;
</span><span style="color: rgba(0, 0, 255, 1)">bool</span><span style="color: rgba(0, 0, 0, 1)"> retval;
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">
* Required to initialize libmongoc's internals
</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
mongoc_init ();
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">
* Optionally get MongoDB URI from command line
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">if</span> (argc > <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">) {
uri_string </span>= argv[<span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">];
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">
* Safely create a MongoDB URI object from the given string
</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
uri </span>= mongoc_uri_new_with_error (uri_string, &<span style="color: rgba(0, 0, 0, 1)">error);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(0, 0, 0, 1)">uri) {
fprintf (stderr,
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">failed to parse URI: %s\n</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">error message: %s\n</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
uri_string,
error.message);
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> EXIT_FAILURE;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">
* Create a new client instance
</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
client </span>=<span style="color: rgba(0, 0, 0, 1)"> mongoc_client_new_from_uri (uri);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(0, 0, 0, 1)">client) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> EXIT_FAILURE;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">
* 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).
</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
mongoc_client_set_appname (client, </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">connect-example</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">
* Get a handle on the database "db_name" and collection "coll_name"
</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
database </span>= mongoc_client_get_database (client, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">db_name</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
collection </span>= mongoc_client_get_collection (client, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">db_name</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">coll_name</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">
* Do work. This example pings the database, prints the result as JSON and
* performs an insert
</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
command </span>= BCON_NEW (<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">ping</span><span style="color: rgba(128, 0, 0, 1)">"</span>, BCON_INT32 (<span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">));
retval </span>=<span style="color: rgba(0, 0, 0, 1)"> mongoc_client_command_simple (
client, </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">admin</span><span style="color: rgba(128, 0, 0, 1)">"</span>, command, NULL, &reply, &<span style="color: rgba(0, 0, 0, 1)">error);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(0, 0, 0, 1)">retval) {
fprintf (stderr, </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">%s\n</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, error.message);
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> EXIT_FAILURE;
}
str </span>= bson_as_json (&<span style="color: rgba(0, 0, 0, 1)">reply, NULL);
printf (</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">%s\n</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, str);
insert </span>= BCON_NEW (<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">hello</span><span style="color: rgba(128, 0, 0, 1)">"</span>, BCON_UTF8 (<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">world</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">));
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!mongoc_collection_insert_one (collection, insert, NULL, NULL, &<span style="color: rgba(0, 0, 0, 1)">error)) {
fprintf (stderr, </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">%s\n</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, error.message);
}
bson_destroy (insert);
bson_destroy (</span>&<span style="color: rgba(0, 0, 0, 1)">reply);
bson_destroy (command);
bson_free (str);
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">
* Release our handles and clean up libmongoc
</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
mongoc_collection_destroy (collection);
mongoc_database_destroy (database);
mongoc_uri_destroy (uri);
mongoc_client_destroy (client);
mongoc_cleanup ();
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> EXIT_SUCCESS;
}</span></pre>
</div>
<p><strong>三、常用接口</strong></p>
<p> 1、mongoc_collection_t * <span class="nf">mongoc_client_new <span class="p">(<span class="k">const <span class="kt">char <span class="o">*<span class="n">uri_string<span class="p">);</span></span></span></span></span></span></span></p>
<p> <span><span>使用提供的URI字符串</span><span>创建一个新的</span></span><span class="doc"><span><span>mongoc_client_t</span></span></span><span><span>。</span></span></p>
<p> 参数<br> uri_string:包含MongoDB连接URI的字符串。<br> 返回<br> 如果URI成功解析,则为新分配的mongoc_client_t,否则为NULL。</p>
<p> 2、<span class="n">mongoc_collection_t <span class="o">* </span></span><span class="n"><span class="o"><span class="nf">mongoc_client_get_collection <span class="p">(<span class="n">mongoc_client_t <span class="o">*<span class="n">client<span class="p">,</span></span></span></span></span></span></span></span><em id="__mceDel"><span class="n"><span class="o"><span class="nf"><span class="p"><span class="n"><span class="o"><span class="n"><span class="p"><span class="k">const <span class="kt">char <span class="o">*<span class="n">db<span class="p">,</span></span></span></span></span></span></span></span></span></span></span></span></span></em><span class="n"><span class="o"><span class="nf"><span class="p"><span class="n"><span class="o"><span class="n"><span class="p"><span class="k"><span class="kt"><span class="o"><span class="n"><span class="p"><span class="k">const <span class="kt">char <span class="o">*<span class="n">collection<span class="p">);</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<div id="parameters" class="section">
<p><span> 参数</span></p>
<p> </p>
<p><code class="docutils literal notranslate"><span class="pre"> client</span></code><span>:一个</span>mongoc_client_t<span>。</span></p>
<p> </p>
<p> </p>
<p><code class="docutils literal notranslate"><span class="pre"> db</span></code><span>:包含集合的数据库的名称。</span></p>
<p> </p>
<p><code class="docutils literal notranslate"><span class="pre"> collection</span></code><span>:集合的名称。</span></p>
</div>
<div id="returns" class="section">
<p><span> 返回</span></p>
<p><span> 新分配的</span>mongoc_collection_t<span><span>,</span><span>当不再使用</span><span>时应使用</span></span>mongoc_collection_destroy()<span><span>释放</span><span>它。</span></span></p>
</div>
<p> </p>
<p> 3、mongoc_cursor_t * mongoc_collection_find_with_opts (mongoc_collection_t * collection,</p>
<p> const bson_t * filter,</p>
<p> const bson_t * opts,</p>
<p> const mongoc_read_prefs_t* read_prefs)</p>
<p> </p>
<p> 参数<br> collection:一个mongoc_collection_t。<br> filter:bson_t包含要执行的查询的。<br> opts:bson_t查询选项,包括排序顺序和要返回的字段。可以NULL。<br> read_prefs:mongoc_read_prefs_t或NULL。</p>
<p> 返回<br> 新分配的mongoc_cursor_t,必须使用mongoc_cursor_destroy()释放。</p>
<p> </p><br><br>
来源:https://www.cnblogs.com/yinguojin/p/13251968.html
頁:
[1]