Фильтр по сравнению двух полей для каждого документа - PullRequest
0 голосов
/ 25 января 2019

Сравните два поля для каждого документа в операции сопоставления

Привет, у меня есть запрос агрегации (остальная часть запроса работает без операции фильтра, которую я опишу ниже) с коллекцией задач иЯ хочу фильтровать (ГДЕ в SQL), чтобы task.accountableId <> task.responsibleId.Я знаю, как создать критерии соответствия для сравнения поля с определенным значением, но не знаю, как сравнивать поля друг с другом.

private static final String ACCOUNTABLE_ID_FIELD = "accountableId";
private static final String RESPONSIBLE_ID_FIELD = "responsibleId";
private static final String STATUS_FIELD = "status";
private static final String TASKS_FIELD = "taskIds";



public List<TaskGroupByDBClass> findTaskIdsGroupedByResponsible() {   

    TypedAggregation<Task> aggregation = Aggregation.newAggregation(Task.class,
    Aggregation.match(Criteria.where(STATUS_FIELD).is(TaskStatus.ASSIGNED)),            
    Aggregation.group(RESPONSIBLE_ID_FIELD).addToSet("id").as(TASKS_FIELD)
    );

    return template.aggregate(aggregation, TaskGroupByDBClass.class).getMappedResults();
}


@Getter
@AllArgsConstructor
public final class TaskGroupByDBClass {

    @Id
    private final String responsibleId;
    private final List<String> taskIds;
}

public class Task {

    private TaskStatus status = TaskStatus.CREATED;
    private String accountableId;
    private String responsibleId;
}

Я ожидаю, что список результатов будет содержать только идентификаторы задач для задач, гдеtask.accountableId <> task.responsibleId.Цель состоит в том, чтобы не отправлять уведомления-напоминания пользователям, которые создали задачи для себя.Мне бы хотелось иметь эффективное решение, так что оно будет запускаться каждый день для миллионов документов в коллекции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...