Агрегация Spring mongoTemplate не работает хорошо ... помогите мне, плз - PullRequest
0 голосов
/ 01 февраля 2020

Я использую mongoTemplate при весенней загрузке, и я хочу написать запрос, используя агрегацию mongoTemplate, но я не могу .. запрос, который я хочу использовать, это

$project: {
        root:"$root",
      name: "$root.name",
      like: "$root.like",
      songs: {
        _id: "$root.songs._id",
        name: "$root.songs.name",
        lyrics: "$root.songs.lyrics",
        like: "$root.songs.like",
        view: "$root.songs.view",
        video: "$video"
      }
    }

, и я пытаюсь использовать это запрос с пружиной mon go db ... как

Aggregation.project()
      .andExpression("root").as("root")
      .andExpression("root.name").as("name")
      .andExpression("root.like").as("like")
      .andExpression("root.songs._id").as("songs._id")
      .andExpression("root.songs.name").as("songs.name")
      .andExpression("root.songs.lyrics").as("songs.lyrics")
      .andExpression("root.songs.like").as("songs.like")
      .andExpression("root.songs.view").as("songs.view")
      .andExpression("root.songs.video").as("songs.video"));

но я думаю, что это неправильно, то, что я хочу сделать, это

  songs: {
            _id: "$root.songs._id",
            name: "$root.songs.name",
            lyrics: "$root.songs.lyrics",
            like: "$root.songs.like",
            view: "$root.songs.view",
            video: "$video"
          }

, но реальный запрос сделан что 'Java код' это

{
  "$project": {
    "root": "$root",
    "name": "$root.name",
    "like": "$root.like",
    "songs._id": "$root.songs._id",
    "songs.name": "$root.songs.name",
    "songs.lyrics": "$root.songs.lyrics",
    "songs.like": "$root.songs.like",
    "songs.view": "$root.songs.view",
    "songs.video": "$root.songs.video"
  }

как я могу сделать запрос, используя метод mongoTemplate project () ??

1 Ответ

0 голосов
/ 01 февраля 2020

Я бы предложил использовать querydsl в сочетании с mongoTemplate. Один из наиболее распространенных способов запроса MongoDB с использованием Spring Data - использование классов Query и Criteria, которые очень близко отражают собственные операторы.

Вы создаете запрос и вставляете условие в запрос, который вы создали, как показано ниже:

Query query = new Query();
query.addCriteria(Criteria.where("name").is("your-name"));
query.addCriteria(Criteria.where("like").is("your-like"));
query.addCriteria(Criteria.where("songs._id").is("your-song-id"));
query.addCriteria(Criteria.where("songs.name").is("your-song-name"));
//and so on you continue with the rest

И после завершения построения вы выполняете его, как показано ниже:

List<User> users = mongoTemplate.find(query,Project.class);

Также очень важно, чтобы у вас были доменные классы Project и Song. Я предполагаю, что вы создали эти классы.

class Project {
 //attributes
 List<Song> songs;
}
class Song {
 //attributes
}

Для получения дополнительной информации о querydsl с MongoDB вы можете обратиться по ссылкам ниже: https://www.baeldung.com/queries-in-spring-data-mongodb http://www.querydsl.com/static/querydsl/2.1.0/reference/html/ch02s07.html

...