mongo-c-driver-0.94.2的安装和使用

来源:互联网 发布:云计算股票 编辑:程序博客网 时间:2024/05/21 18:57

最近由于mongodb作为olap需要导出csv,需要某些人做分析,然后用mongo自带的mongoexp命令导出时

发现有谢value里头有“\n”所以导致导出csv的时候出现自动的非法换行。

用shell处理有些繁琐,所以索性用C写个简易的程序导所需的数据。

1.安装mongo-c-driver-0.94.2


在http://docs.mongodb.org/manual/applications/drivers/下载drivers for Ctar -zxvf mongo-c-driver-0.94.2.tar.gzcd mongo-c-driver-0.94.2./configure --prefix=/usr/local/mongo-drimakemake install

2.基础环境


cd /usr/local/mongo-drilsbin  include  lib  sharevi Makefilecat Makefile INCLUDE += -I./include/libmongoc-1.0/INCLUDE += -I./include/libbson-1.0/LIB += -luuid -lsslLIB += -L./lib -lmongoc-1.0OP += -o mainall:    gcc $(INCLUDE) $(LIB) $(OP) main.c -g

3.构建基本C程序测试



# vim main.c[root@mongoDR new]# cat main.c#include <stdio.h>#include <stdlib.h>#include "mongoc.h"#include "bson.h"int main(int argc, char *argv[]) {mongoc_client_t *client;mongoc_collection_t *collection;mongoc_cursor_t *cursor;bson_error_t error;const bson_t *doc;const char *uristr = "mongodb://127.0.0.1/";const char *collection_name = "cai.test";char *str;char *dbname = "cai";bson_t query;bson_t query_double;mongoc_init ();client = mongoc_client_new (uristr);if (!client) {fprintf (stderr, "Failed to parse URI.\n");return EXIT_FAILURE;}bson_init (&query);bson_init (&query_double);double a = 3;double b = 11;bson_append_double(&query_double,"$gte", -1, a);bson_append_double(&query_double,"$lt", -1, b);bson_append_document(&query, "hello", -1, &query_double);#if 0   bson_append_utf8 (&query, "hello", -1, "world", -1);#endifcollection = mongoc_client_get_collection(client, dbname, collection_name);cursor = mongoc_collection_find (collection, MONGOC_QUERY_NONE, 0, 0, 0, &query, NULL, NULL);while (!mongoc_cursor_error (cursor, &error) && mongoc_cursor_more (cursor)) {if (mongoc_cursor_next (cursor, &doc)) {str = bson_as_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_client_destroy (client);return EXIT_SUCCESS;}

4.测试数据和编译

测试数据

> show dbsadmin  (empty)cai    0.078GBlocal  0.078GBtest   (empty)> db.cai.test.find();{ "_id" : ObjectId("536b9370cccf064e0df720f1"), "hello" : -1 }{ "_id" : ObjectId("536b937ecccf064e0df720f2"), "world" : -1 }{ "_id" : ObjectId("536b9406cccf064e0df720f3"), "wangyl" : -1 }{ "_id" : ObjectId("536b9412cccf064e0df720f4"), "caiweg" : 10 }{ "_id" : ObjectId("536b974ecccf064e0df720f5"), "hello" : -1 }{ "_id" : ObjectId("536b9753cccf064e0df720f6"), "hello" : 3 }{ "_id" : ObjectId("536b9758cccf064e0df720f7"), "hello" : 6 }{ "_id" : ObjectId("536b975ccccf064e0df720f8"), "hello" : 10 }{ "_id" : ObjectId("536b9760cccf064e0df720f9"), "hello" : 8 }{ "_id" : ObjectId("536ba654cccf064e0df720fa"), "hello" : "a" }

编译程序运行之


pwd/usr/local/mongo-drimake// 此行是输出效果 #gcc -I./include/libmongoc-1.0/ -I./include/libbson-1.0/ -luuid -lssl -L./lib -lmongoc-1.0 -o main main.c -g./main# ./main2014/05/09 00:23:01.0247: [15436]:     INFO:      cluster: Client initialized in direct mode.{ "_id" : { "$oid" : "536b9753cccf064e0df720f6" }, "hello" : 3.000000 }{ "_id" : { "$oid" : "536b9758cccf064e0df720f7" }, "hello" : 6.000000 }{ "_id" : { "$oid" : "536b975ccccf064e0df720f8" }, "hello" : 10.000000 }{ "_id" : { "$oid" : "536b9760cccf064e0df720f9" }, "hello" : 8.000000 }

至此,小程序当然还没写完,但是主要说的还是mongo的C驱动程序!

后续还需要将bson数据转换成结构体,然后将值中的“\n”去掉,导出成CSV格式就可以收工了!


############################

本文由笔者原创

作者:john

转载请注明出处


0 0
原创粉丝点击