У меня долгое время была проблема с преобразованием objectId в строку при весенней агрегации загрузки, и я не могу найти ничего полезного способ ее решения.
Наконец-то я понял и хотел бы поделиться своим способом с теми, у кого такая же проблема;
Как вы знаете, для поиска нужны две стороны поиска с одинаковым значением, например, два стороны objectId или двухсторонняя строка
если у вас есть objecteId и строка на другой стороне, вам нужно преобразовать этот objectId в строку, а затем написать этап поиска;
этап перед поиском должен быть этапом проекта с использованием Выражение $toString, подобное приведенному ниже:
Код: Выделить всё
ProjectionOperation projectionOperation = Aggregation.project(/*your nedded fields */)
.and(ConvertOperators.ToString.toString("$_id)).as("aggId");
Код: Выделить всё
Aggregation agg = Aggregation.newAggregation(
Aggregation.match(
Criteria.where("cratorId").is(userId)
)
,
projectionOperation
,
Aggregation.lookup("post", "aggId", "courseId", "postList"),
Код: Выделить всё
ProjectionOperation projectionOperation = Aggregation.project(/*your nedded fields */)
.and(ConvertOperators.ToString.toString("$_id")).as("aggId");
Aggregation agg = Aggregation.newAggregation(
Aggregation.match(
Criteria.where("creatorId").is(userId)
)
,
projectionOperation
,
Aggregation.lookup("post", "aggId", "courseId", "postList")
);
return this.aggregate(agg, entityClass, Object.class).getMappedResults();
Подробнее здесь: https://stackoverflow.com/questions/640 ... pring-boot