0

我有一个带有 fields 的集合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);
4

1 回答 1

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 字段以及total 字段。

这给了我一个原始输出:

{ "a" : 10.0 , "b" : 20.0 , "c" : 30.0 , "total" : 300.0}

由于您没有包含 Grouped 类,我不确定它是否完全映射到您想要的对象,但它可能会为您指明正确的方向。

于 2013-05-29T11:52:57.800 回答