Как сгруппировать результат запроса mongodb по документу, на который ссылаются вручную, при весенней загрузке? - PullRequest
1 голос
/ 02 мая 2020

Я хотел бы сделать текстовый поиск в моей базе данных, используя Mongodb и Spring Boot, а затем сгруппировать их по элементу document, на который есть ссылка, но мой код не работает, и я не знаю, что неправильно это. Вот мой основной документ:

@Document(collection = "mainCollection")
public class mainCollection{

@Id
private String id;

@TextIndexed(weight=7)
private String myText7;

@TextIndexed(weight=3)
private String myText3;

private SecondDocument secondDoc;
}

Вот второй документ:

@Document(collection = "secondCollection")
public class SecondDocument{

private String doc_name;

@Id 
private String id;
}

Вот мой код для поиска текстовой строки:

      TextCriteria criteria = TextCriteria.forDefaultLanguage().matchingAny(searchStr);
      MatchOperation match = Aggregation.match(criteria);

      GroupOperation group = Aggregation.group("secondDoc.doc_name").push("myText7").as("myText7").push("myText3").as("myText3");
      UnwindOperation unwindt7 = Aggregation.unwind("myText7");
      UnwindOperation unwindt3 = Aggregation.unwind("myText3");

      Aggregation aggregation = Aggregation.newAggregation(match, unwindt7, unwindt3,group);

      AggregationResults<AggrResults> results = mongoTemplate.aggregate(aggregation, mongoTemplate.getCollectionName(mainCollection.class), AggrResults.class);

      List<AggrResults> result= results.getMappedResults();

Вот мой пример данных:

{ "_id" : ObjectId("5eacfd602aeec51754eca0a3"),
"myText7" : "test", "myText3" : "",
"secondDoc" : { "_id" : ObjectId("5eacfd602aeec51754eca0a2"), "doc_name" : "Lasdehner Straße"}
}
{ "_id" : ObjectId("5eacfda52aeec52a6036c2a2"),
" myText7" : "test",
 " myText3" : "",
“secondDoc " : { "_id" : ObjectId("5eacfda52aeec52a6036c2a1"), "doc_name" : "Lakhnau"}
}
{ "_id" : ObjectId("5eacff552aeec536f4a880a7"),
"myText7" : "test", 
"myText3" :””, 
"secondDoc " : { "_id" : ObjectId("5eacff552aeec536f4a880a6"), "doc_name" : "Lasdehner Straße" }
}
{ "_id" : ObjectId("5ead07202aeec54778f91dcc"),
" myText7" : "test",
"myText3" : "test2",
"secondDoc" : { "_id" : ObjectId("5ead07202aeec54778f91dcb"), "doc_name" : "Negaunee"}
}

Итак, когда я ищу «test», я ожидаю, что получит эти три группы (и получит весь документ, включая внутренний документ как результат):

Группа 1:

{ "_id" : ObjectId("5eacfda52aeec52a6036c2a2"),
"myText7" : "test",
 "myText3" : "",
“secondDoc " : { "_id" : ObjectId("5eacfda52aeec52a6036c2a1"), "doc_name" : "Lakhnau"}
}

Группа 2:

{ "_id" : ObjectId("5eacfd602aeec51754eca0a3"),
"myText7" : "test", "myText3" : "",
"secondDoc" : { "_id" : ObjectId("5eacfd602aeec51754eca0a2"), "doc_name" : "Lasdehner Straße"}
}
{ "_id" : ObjectId("5eacff552aeec536f4a880a7"),
"myText7" : "test", 
"myText3" :””, 
"secondDoc " : { "_id" : ObjectId("5eacff552aeec536f4a880a6"), "doc_name" : "Lasdehner Straße" }
}

Группа 3:

 { "_id" : ObjectId("5ead07202aeec54778f91dcc"),
    "myText7" : "test",
    "myText3" : "test2",
    "secondDoc" : { "_id" : ObjectId("5ead07202aeec54778f91dcb"), "doc_name" : "Negaunee"}
    }

Что я получаю как результат - 3 группы, и это правильно. Но форматирование неверно. Вторая группа выглядит следующим образом:

"myText7" : [ "test" , "test"], 
"myText3" : [ "" , ""], 

Я хотел бы получить результат этой группы в виде двух отдельных документов.

...