Spring Data MongoDB GroupOperation конвертируется в ObjectID - PullRequest
0 голосов
/ 05 января 2019

Я уже некоторое время гуглю и не могу найти решение. Возможно, я неправильно создаю свой поиск, но вот что я пытаюсь сделать.

У меня есть две коллекции, одна из которых ссылается на идентификатор другой коллекции и хранится в виде строки. ПРИМЕЧАНИЕ: прежде чем вы спросите, я не могу преобразовать «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 в этом запросе.

Как мне это сделать? Или есть другой способ достичь желаемых результатов?

...