通过比较每个文档的两个字段进行过滤

时间:2019-01-25 15:36:45

标签: mongodb spring-data-jpa aggregation-framework

比较匹配操作中每个文档的两个字段

您好,我对一个Task集合有一个聚合查询(该查询的其余部分在没有下面将要描述的过滤操作的情况下运行良好),并且我想过滤(SQL中的WHERE),所以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的任务的任务ID。目的是避免将通知提醒发送给自己创建任务的用户。我希望有一个高效的解决方案,因此每天将运行集合中的数百万个文档。

0 个答案:

没有答案