如何对 spring 数据 mongodb 使用聚合
How to use aggregation with spring data mongodb
我有一份 collection 的文件。每个文档都有两个字段 - code
和 status
。我的 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.
我有一份 collection 的文件。每个文档都有两个字段 - code
和 status
。我的 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.