0
各ユーザの各レベルのアラートの数で結果を生成する必要があります。Spring MongoDBのネストされたグループ
次のような構造:
{
"identitity": "59e3b9dc5a3254691f327b67",
"alerts": [
{
"level": "INFO",
"count": "3"
},
{
"level": "ERROR",
"count": "10"
}
]
}
警告entitityは、以下の構造を有する:
@Document(collection = AlertEntity.COLLECTION_NAME)
public class AlertEntity {
public final static String COLLECTION_NAME = "alerts";
@Id
private ObjectId id;
@Field
private AlertLevelEnum level = AlertLevelEnum.INFO;
@Field("title")
private String title;
@Field("payload")
private String payload;
@Field("create_at")
private Date createAt = new Date();
@Field("delivered_at")
private Date deliveredAt;
@Field("delivery_mode")
private AlertDeliveryModeEnum deliveryMode =
AlertDeliveryModeEnum.PUSH_NOTIFICATION;
@Field("parent")
@DBRef
private ParentEntity parent;
@Field("son")
@DBRef
private SonEntity son;
private Boolean delivered = Boolean.FALSE;
}
を私は次のメソッドは、ネストされた方法で結果を予測しようとし実施しています。しかし、「アイデンティティ」フィールドは常にヌルであり、「アラート」フィールドは空のコレクションです。
@Override
public List<AlertsBySonDTO> getAlertsBySon(List<String> sonIds) {
TypedAggregation<AlertEntity> alertsAggregation =
Aggregation.newAggregation(AlertEntity.class,
Aggregation.group("son.id", "level").count().as("count"),
Aggregation.project().and("son.id").as("id")
.and("alerts").nested(
bind("level", "level").and("count")));
// Aggregation.match(Criteria.where("_id").in(sonIds)
AggregationResults<AlertsBySonDTO> results = mongoTemplate.
aggregate(alertsAggregation, AlertsBySonDTO.class);
List<AlertsBySonDTO> alertsBySonResultsList = results.getMappedResults();
return alertsBySonResultsList;
}
私が得る結果は以下の通りです:
{
"response_code_name": "ALERTS_BY_SON",
"response_status": "SUCCESS",
"response_http_status": "OK",
"response_info_url": "http://yourAppUrlToDocumentedApiCodes.com/api/support/710",
"response_data": [
{
"identity": null,
"alerts": []
},
{
"identity": null,
"alerts": []
}
],
"response_code": 710
}
結果、以下のようにDTOは次のとおりです。
public final class AlertsBySonDTO implements Serializable {
private static final long serialVersionUID = 1L;
@JsonProperty("identity")
private String id;
@JsonProperty("alerts")
private ArrayList<Map<String, String>> alerts;
public AlertsBySonDTO() {
super();
}
public AlertsBySonDTO(String id, ArrayList<Map<String, String>> alerts) {
super();
this.id = id;
this.alerts = alerts;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public ArrayList<Map<String, String>> getAlerts() {
return alerts;
}
public void setAlerts(ArrayList<Map<String, String>> alerts) {
this.alerts = alerts;
}
}
ネストされた方法で結果を予測するために何をすべきか?集約フレームワークに予め