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

最近由于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 C
tar -zxvf mongo-c-driver-0.94.2.tar.gz
cd mongo-c-driver-0.94.2
./configure --prefix=/usr/local/mongo-dri
make
make install

2.基础环境


cd /usr/local/mongo-dri
ls
bin  include  lib  share
vi Makefile
cat Makefile 
INCLUDE += -I./include/libmongoc-1.0/
INCLUDE += -I./include/libbson-1.0/
LIB += -luuid -lssl
LIB += -L./lib -lmongoc-1.0
OP += -o main
all:
    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);
#endif

	collection = 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 dbs
admin  (empty)
cai    0.078GB
local  0.078GB
test   (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-dri
make
// 此行是输出效果 #gcc -I./include/libmongoc-1.0/ -I./include/libbson-1.0/ -luuid -lssl -L./lib -lmongoc-1.0 -o main main.c -g
./main
# ./main
2014/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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值