如何对 spring 数据 mongodb 使用聚合

How to use aggregation with spring data mongodb

我有一份 collection 的文件。每个文档都有两个字段 - codestatus。我的 mongodb collection 包含如下文件:

[{
    "code":"1234",
    "status":"A"
},
{
    "code":"1234",
    "status":"A"
}
{
    "code":"1234",
    "status":"B"
},
{
    "code":"1235",
    "status":"A"
}]

我想按每个代码的状态查找计数。我想要的输出类似于以下内容:

[
    {"code":"1234", "counts": {"A":2, "B":1}},
    {"code":"1235", "counts": {"A":1, "B":0}}
]

如何使用 spring 数据 mongodb 执行此操作?我是 mongodb.

的新手

更新 我已经设法编写了 mongodb 查询。这是:

db.mycollection.aggregate(
[
{"$group": {"_id": {"code":"$code", "status":"$status"}, "total": {"$sum":1}}},
{"$group": {"_id": "$_id.code", "counts": {"$push": {"status": "$_id.status", "count":"$total" }}}},
{"$project" : {"code":"$_id", _id: 0, counts:1}}
])

任何人都可以帮助如何在 spring 数据 mongodb 中编写此查询?

棘手的查询,但只要在 mongodb 之外多走一步,这对您来说应该是可行的。至于你问题的 Spring 部分,有很多关于它的教程。

db.codes.aggregate(
  {$group: {_id: {code: "$code", status: "$status"}, count: {$sum: 1}}},
  {$group: {_id: "$_id.code", "counts": {$push: {status: "$_id.status", count: "$count"}}}})

{ "_id" : 123, "counts" : [ { "status" : "B", "count" : 1 }, { "status" : "A", "count" : 1 } ] }
{ "_id" : 124, "counts" : [ { "status" : "C", "count" : 2 }, { "status" : "B", "count" : 1 } ] }

请使用以下代码结帐

DBObject  counts= new BasicDBObject();
counts.put("status", "status");
counts.put("count", "count");

AggregationResults<Output> results = operations.aggregate(
    newAggregation(Codes.class, 
        group("code","status").count().as("count"),
        group("code").push(counts).as("counts")
), Output.class);

我认为 Codes.java class 作为您的输入文档 class 并且 Output.java class 作为您想要的结果 class.