Я уже некоторое время гуглю и не могу найти решение. Возможно, я неправильно создаю свой поиск, но вот что я пытаюсь сделать.
У меня есть две коллекции, одна из которых ссылается на идентификатор другой коллекции и хранится в виде строки. ПРИМЕЧАНИЕ: прежде чем вы спросите, я не могу преобразовать «parentId» в ObjectId в коллекции.
Коллекция автомобилей:
{
id: ObjectId("1234")
... other car fields ...
},
{
id: ObjectId("2345")
... other car fields ...
}
Коллекция комментариев
{
id: ObjectId("3456"),
commentMessage: "this is a comment",
parentRecordId: "1234"
},
{
id: ObjectId("4567"),
commentMessage: "this is another comment",
parentRecordId: "2345"
}
Я использую Spring Data MongoDB с MongoDB версии 3.6. Вот мой запрос, и я не могу на всю жизнь заставить его вернуть подходящие объекты Car.
TextCriteria criteria = TextCriteria.forDefaultLanguage().matchingAny("comment");
MatchOperation match = Aggregation.match(criteria);
GroupOperation group = Aggregation.group("parentRecordId");
LookupOperation lookup = Aggregation.lookup("car", "_id", "_id", "car");
Aggregation aggregation = Aggregation.newAggregation(match, group, lookup);
AggregationResults<CommentAggregationResults> results = mongoTemplate.aggregate(aggregation, Comment.class, CommentAggregationResults.class);
Вот объект модели. CommentAggregationResults.class
public class CommentAggregationResults(){
@Id
private String id;
private Car car;
... getters and setters ...
}
Я ожидаю от этого запроса двух ответов из базы данных. Внутри моего класса CommentAggregationResults я должен видеть Car ID в поле «id» и сам объект Car в поле «car». (Я собираюсь опираться на этот запрос, чтобы сделать его более полезным, мне просто нужно сначала пройти этот шаг).
То, что я вижу в своих результатах, - это два объекта CommentAggregationResults (как и ожидалось) - идентификатор установлен правильно. Однако объект Car является нулевым.
Моя теория заключается в том, что мне нужно каким-то образом преобразовать строку "parentRecordId" в ObjectId в этом запросе.
Как мне это сделать? Или есть другой способ достичь желаемых результатов?