我在春季启动时使用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