当前位置: 首页 > 知识库问答 >
问题:

如何在spring data mongodb中使用聚合

费子濯
2023-03-14

我有一套文件。每个文档有两个字段—“代码”和“状态”。我的mongodb集合包含以下文档:

[{
    "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 data 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 data mongodb中编写此查询吗?

共有2个答案

蒲勇
2023-03-14

棘手的查询,但这应该适用于您,只需在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 } ] }
卫念
2023-03-14

请使用以下代码签出

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);

我考虑过代码。java类作为输入文档类和输出。java类作为所需的结果类。

 类似资料:
  • 我使用的是MongoDB,我必须在spring数据mongo DB中使用$date的聚合查询。这是我的用户收藏。 现在我必须使用MongoTemplate在spring data mongodb中编写这个查询。我是使用聚合的新手。他们是任何简单的方法来使用它。请帮忙 谢谢你。

  • 我的数据在Kafka事务处理主题中是这样的: ConsumerRecord(Topic='transactions',partition=0,offset=4,timestamp=1591277946736,timestamp_type=0,key=none,value={'transaction_id':'4952940859','account_number':14,'transaction_

  • 问题内容: 我正在尝试使用内部,而不返回匹配的文件。 谁能告诉我哪里出了问题或正确的语法? 我什至尝试更换 问题答案: 就像您链接到的文档中所说的那样,执行此操作的两种方法是: 要么 但是我也尝试了您的第二次尝试,并且效果很好。 顺便说一句,在这种情况下,正则表达式选项没有意义,因为无论如何您只需要一个匹配项。请注意,它甚至没有在文档中列出。

  • 我使用SpringDataMongo作为ORM来访问我的MongoDb。我需要阅读一个MongoDb集合,其中包含我不管理内容及其有效性的文档。我面临一个问题:文档并非都是有效的,当我使用“findAll”方法时,我只捕获了一个异常。我希望找到所有有效的文档并拒绝无效的文档,而不是这种行为。 例如,我有一个带有原始布尔值的bean,在文档中,该字段被设置为String类型。因此,当我使用findA

  • 我是MongoDB的新手! 有人能帮助我如何编写java代码来转换下面的mongo聚合查询吗?目前,我正在一个具有“spring-boot-starter-data-mongob”作为依赖项的Spring Boot应用程序中编写它。我正在考虑使用Mongo模板使用下面的查询获取分组文档。