我有一个包含字段id, a-int, b-int, c-int, total-int
的集合。我想获得a, b, c, total
,但我最终得到total
的总和,其余的字段值为0, 0, 0
。我该如何解决? 10, 20, 30, 300
由于
数据样本
id, a, b, c, total
xid, 10, 20, 30, 100
xid, 10, 20, 30, 200
GroupBy groupBy = GroupBy.key("{a : 1, b : 1, c : 1}")
.initialDocument("{ total: 0 }")
.reduceFunction("function(obj, result) { result.total += obj.total; }");
GroupByResults<Grouped> results = mongoTemplate.group(Criteria.where("id").is(id),
TABLE, groupBy, Grouped.class);
答案 0 :(得分:1)
我认为你想要的结果使用以下内容:
GroupBy groupBy = GroupBy.key("a", "b", "c")
.initialDocument("{ total: 0 }")
.reduceFunction("function(obj, result) { " +
" result.a = obj.a; " +
" result.b = obj.b; " +
" result.c = obj.c; " +
" result.total += obj.total; " +
"}");
请注意,您需要做的是告诉reduce函数放入a,b和c字段以及总字段的内容。
这给了我一个原始输出:
{ "a" : 10.0 , "b" : 20.0 , "c" : 30.0 , "total" : 300.0}
由于您没有包含Grouped类,我不确定它是否完全映射到您想要的对象,但它可能指向正确的方向。