【问题标题】:Groupby in MongoTemplate returning empty fieldsMongoTemplate中的Groupby返回空字段
【发布时间】:2013-01-13 10:24:30
【问题描述】:

我有一个包含字段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);

【问题讨论】:

    标签: spring mongodb spring-mvc


    【解决方案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 类,我不确定它是否完全映射到您想要的对象,但它可能会为您指明正确的方向。

    【讨论】:

    • 我确实有一个 Group 类来映射它。一个好的答案永远不会太迟。谢谢。
    • 如果 id, a, b, c, 总 xid, 10, 20, 30, 100 xid, 10, 20, 30, 200 xid, 10, 10, 30, 300 xid, 10, 30, 30, 400 我需要像 { "a" : 10.0 , "b" : 20.0 , "c" : 30.0 , "total" : 300.0} { "a" : 10.0 , "b" : 10.0 , "c" : 30.0,“总计”:300.0} {“a”:10.0,“b”:30.0,“c”:30.0,“总计”:300.0}
    猜你喜欢
    • 1970-01-01
    • 2017-02-06
    • 1970-01-01
    • 2020-09-28
    • 2017-03-09
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    相关资源
    最近更新 更多