У меня есть два класса, которые называются place
и review
следующим образом:
@Document(collection = "place")
public class Place {
@Id
private String id;
private String place_name;
//getters and setters are also written
}
и:
@Document(collection = "review")
public class Review {
public Review() {
}
@Id
private String id;
@TextIndexed(weight=3)
private String first_point;
@TextIndexed(weight=2)
private String second_point;
@TextIndexed(weight=1)
private String third_point;
@DBRef
private Place place;
@DBRef
private User user;
private String date;
//getter and setters are also available
}
Я использовал следующий код для добавления полного текста search:
public List<Review> searchReviews(String text) {
TextQuery textQuery = TextQuery.queryText(new TextCriteria().matchingAny(text)).sortByScore();
List<Review> reviews = mongoTemplate.find(textQuery, Review.class);
}
Это работает, но я не могу сгруппировать результаты, так как у меня нет aggregation
. Нет ли способа использовать этот запрос find
в конвейере aggregation
? Или есть ли способ сгруппировать результаты без aggregation
?
ОБНОВЛЕНИЕ:
Я изменил свой код на следующее:
TextCriteria criteria = TextCriteria.forDefaultLanguage().matchingAny(text);
MatchOperation match = Aggregation.match(criteria);
GroupOperation group = Aggregation.group("first_point");
Aggregation aggregation = Aggregation.newAggregation(match, group);
AggregationResults<CommentAggregationResults> results = mongoTemplate.aggregate(aggregation, Review.class, MyAggregationResults.class);
List<MyAggregationResults> foos = results.getMappedResults();
System.out.println("size is: "+foos.size());
System.out.println("output = "+foos.get(0).getFirstPoint());
Теперь проблема в том, что foos.size()
возвращает 1
, но результат следующей строки null
.