Как использовать агрегацию с весенними данными mongodb

#mongodb #spring-data-mongodb

#mongodb #spring-data-mongodb

Вопрос:

У меня есть коллекция документов. В каждом документе есть два поля — code и status . Моя коллекция 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}}
]
 

Как я могу сделать это с весенними данными 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?

Ответ №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);
 

Я рассмотрел коды.класс java в качестве вашего входного класса документа и Output.java класс как желаемый класс результата.

Ответ №2:

Сложный запрос, но это должно сработать для вас, сделав еще один шаг за пределы mongodb. Что касается весенней части вашего вопроса, об этом есть много руководств.

 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 } ] }
 

Комментарии:

1. Спасибо за ваш ответ. Я уже написал запрос в mongo query и обновил вопрос. Сейчас я пытаюсь написать это весной.

2. круто, не могу помочь вам с весной, хотя я разработчик ruby. как насчет того, чтобы принять мой ответ тогда?

3. Я также решил весеннюю часть. Могу ли я отредактировать ваш ответ и добавить часть Java?