Я вынужден использовать структуру агрегации и проект операцию Spring Data MongoDb .
Что бы я хотелнужно создать массив объектов в результате операции проекта.
Учитывая этот промежуточный результат агрегации:
{
"processes": [
{
"id": "101a",
"ownership": {
"master": {
"id": "201a",
"username": "carl93"
},
"assignees": [
{
"id": "201a",
"username": "carl93"
},
{
"id": "202a",
"username": "susan"
}
]
}
},
{
"id": "101b",
"ownership": {
"master": null,
"assignees": [
{
"id": "201a",
"username": "carl93"
},
{
"id": "202a",
"username": "susan"
}
]
}
}
]
}
Я хочу получить следующее:
{
"responsibleUsers": [
{
"id": "201a",
"username": "carl93",
"processId": "101a"
},
{
"id": "201a",
"username": "carl93",
"processId": "101b"
},
{
"id": "202a",
"username": "susan",
"processId": "101b"
}
]
}
Таким образом, для каждого процесса, если у владельца есть главный пользователь, я должен получить имя пользователя и идентификатор пользователя из объекта master , в противном случае я должен получить их от пользователей, которые находятся в assignee array.
Сейчас я могу обрабатывать только случай, когда мастер не равен NULL, и я использую что-то вроде этого:
ProjectionOperation po = Aggregation.project().and(VariableOperators.mapItemsOf("order.processes").as("rt")
.andApply(
aggregationOperationContext -> {
Document document = new Document();
document.append("id", "$$rt.master.id");
document.append("username", "$$rt.master.username");
document.append("processId", "$$rt.id");
return document;
}
)).as("responsibleUsers");
Любое предложениедля операции "если еще"?Возможно, мне следует использовать вложенные VariableOperations и ConditionalOperations, но я не могу понять, как.