Сравните два поля для каждого документа в операции сопоставления
Привет, у меня есть запрос агрегации (остальная часть запроса работает без операции фильтра, которую я опишу ниже) с коллекцией задач иЯ хочу фильтровать (ГДЕ в 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.Цель состоит в том, чтобы не отправлять уведомления-напоминания пользователям, которые создали задачи для себя.Мне бы хотелось иметь эффективное решение, так что оно будет запускаться каждый день для миллионов документов в коллекции.