我在春季启动时使用mongoTemplate,并且我想使用mongoTemplate Aggregation编写查询,但我无法..查询,我想使用的是

$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"
      }
    }


我试图在Spring mongo 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()方法进行查询?

最佳答案

我建议尝试与mongoTemplate结合使用querydsl。使用Spring Data查询MongoDB的更常见方法之一是利用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
}


有关MongoDB的querydsl的更多信息,您可以参考以下链接:
https://www.baeldung.com/queries-in-spring-data-mongodb
http://www.querydsl.com/static/querydsl/2.1.0/reference/html/ch02s07.html

09-28 05:39