Как получить счет в mongoDB через Spring Boot? - PullRequest
0 голосов
/ 08 октября 2018

Я новичок в MongoDB, поэтому, пожалуйста, сотрудничайте, если я спрошу что-нибудь глупое.пожалуйста, обратитесь к таблице ниже

status:"Failure"
key:object
   accountID:"AKRRTTY"

Может кто-нибудь сказать мне, как я могу найти счетчики статуса в соответствии с acountID (который является подобъектом ключа)?

Статусмогут быть разных типов: например, Processed, Blocked и т. д.

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Вы должны использовать агрегацию, чтобы получить счетчик всех статусов за один раз.

Вам необходимо настроить выходное pojo для учета запроса агрегации.В идеале ваше pojo должно содержать два поля, одно для статуса (_id) и одно для count (count).

Что-то вроде

AggregationOperation match = Aggregation.match(Criteria.where("key.carrier").is(carrierId));
AggregationOperation group = Aggregation.group("status").count().as("count");
AggregationOperation project = Aggregation.project("count").andExclude("_id").andInclude(Fields.from(Fields.field("status", "_id")));


Aggregation agg = Aggregation.newAggregation(match,group,project);

List<YourPojo> results = mongoTemplate.aggregate(agg, colname, YourPojo.class).getMappedResult();
0 голосов
/ 08 октября 2018

Вы можете объединить $match и $group для того, чего вы хотите достичь.Операция сопоставления будет отфильтрована на accountID, где группа объединит результаты в поле состояния и подсчитает вхождения с помощью аккумулятора.

Форматирование двух запросов будет выглядеть следующим образом:

Соответствующий запрос:

{'$match': {
   'key.accountID': '<<account_id>>'
   }
}

Групповой запрос:

{'$group': {
   '_id': '$status', 
   'count': {'$sum': 1}
   }
}

В Java это можно сделать так:

Arrays.asList(
  match(eq("key.accountID", "test")), 
  group("$status", sum("count", 1L))
)

PS для java потребуется следующееимпорт:

import java.util.Arrays;
import static com.mongodb.client.model.Filters.eq;
import static com.mongodb.client.model.Aggregates.group;
import static com.mongodb.client.model.Aggregates.match;
import static com.mongodb.client.model.Accumulators.sum;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...