关于c driver取得执行结果的问题

heartlesstoanyone 2014-03-25 10:16:16
我现在有一个需求,求表中一字段的累加之和,表结构及mapreduce执行结果如下:
shard1:PRIMARY> db.mytest.find()
{ "_id" : 1, "name" : "apple", "price" : 10 }
{ "_id" : 2, "name" : "boy", "price" : 5 }
{ "_id" : 3, "name" : "apple", "price" : 20 }
{ "_id" : 4, "name" : "apple", "price" : 30 }
{ "_id" : 5, "name" : "cup", "price" : 10 }
{ "_id" : 6, "name" : "cup", "price" : 20 }
{ "_id" : 7, "name" : "dark", "price" : 10 }
{ "_id" : 8, "name" : "dark", "price" : 10 }
{ "_id" : 9, "name" : "egg", "price" : 10 }
{ "_id" : 0, "name" : "film", "price" : 10 }
shard1:PRIMARY> db.runCommand({ mapreduce:'mytest', map:function() { emit(1,{sum:this.price}); }, reduce:function(key, values) { var a = values[0]; for (var i=1;i < values.length; i++) { var b = values[i]; a.sum += b.sum; } return a; }, out:{inline:1}})
{
"results" : [
{
"_id" : 1,
"value" : {
"sum" : 135
}
}
],
"timeMillis" : 1,
"counts" : {
"input" : 10,
"emit" : 10,
"reduce" : 1,
"output" : 1
},
"ok" : 1
}

我现在需要在c代码中取到sum的值,该如何做?
如下是无法取到sum值的:
bson cmd;
bson out = {NULL, 0};
bson_init(&cmd);
bson_append_string(&cmd, "mapreduce", "mytest");
bson_append_string(&cmd, "map", "function(){ emit(1,{sum:this.a_price}); }");
bson_append_string(&cmd, "reduce", "function(key, values){ var a = values[0]; for (var i=1;i < values.length; i++) { var b = values[i]; a.sum += b.sum; } return a; }");
bson_append_string(&cmd, "out", "{outline:1}");
bson_finish(&cmd);
const int result = mongo_run_command(conn, "mydb", &cmd, &out);
bson_print((const bson *)&out);

bson_print的结果是:
result : 2 {outline:1}
timeMillis : 16 56
counts : 3
input : 16 6
emit : 16 6
reduce : 16 1
output : 16 1

ok : 1 1.000000
...全文
188 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
heartlesstoanyone 2014-03-25
  • 打赏
  • 举报
回复
搞定:
bson cmd[1];
	bson out[1];
	bson_init(cmd);   
    bson_append_string(cmd, "aggregate", "mytable");

	bson_append_start_array(cmd, "pipeline");
	    bson_append_start_object(cmd, "0");
			bson_append_start_object(cmd, "$group");
			    //bson_append_null(cmd, "_id");
			    bson_append_string(cmd, "_id", "null");
				bson_append_start_object(cmd, "sum");		    
			        bson_append_string(cmd, "$sum", "$a_price");
				bson_append_finish_object(cmd);
			bson_append_finish_object(cmd);
		bson_append_finish_object(cmd);

        bson_append_start_object(cmd, "1");
			bson_append_start_object(cmd, "$project");
			    bson_append_int(cmd, "_id", 0);
				bson_append_int(cmd, "sum", 1);
			bson_append_finish_object(cmd);
		bson_append_finish_object(cmd);

	bson_append_finish_array(cmd);
	
    bson_finish(cmd);
	bson_print(cmd);
	
	const int result = mongo_run_command(conn, "mydb", cmd, out);

1,798

社区成员

发帖
与我相关
我的任务
社区描述
MongoDB相关内容讨论区
社区管理员
  • MongoDB社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧