如何使用 Spring 数据 MongoDB 定位查询中数组的最后一项?
How to target the last item of an array in a query using Spring Data MongoDB?
假设有一组博客文章,每篇文章都有一系列评论。评论数组的最后一条评论总是最新的。
{
subject: "This is my post",
comments: [
{"priority": "HIGH", "text": "Hello, my name is...", "createdAt": ISODate("2021-01-18T09:51:32.000Z")},
{"priority": "MEDIUM", "text": "I agree", "createdAt": ISODate("2021-01-19T09:51:32.000Z")},
{"priority": "LOW", "text": "Nice post", "createdAt": ISODate("2021-01-20T09:51:32.000Z")}
]
}
我想创建一个查询:
Give me all the blog posts whose most recent comment has priority
"HIGH"
我尝试过的:
Query query = new Query();
List<Criteria> criteriaList = new ArrayList<>();
// other filters added to the criteria list here
CommentPriority priorityEnum = CommentPriority.valueOf("HIGH");
criteriaList.add(Criteria.where("comments.-1.priority").is(priorityEnum);
query.addCriteria(new Criteria().andOperator(criteriaList.toArray(new Criteria[criteriaList.size()])));
List<BlogPost> posts = mongoOperations.find(query, BlogPost.class);
这 returns 结果是一个空数组,即使集合中有博客文章的最后一条评论具有高优先级也是如此
Query query = new Query();
List<Criteria> criteriaList = new ArrayList<>();
// other filters added to the criteria list here
CommentPriority priorityEnum = CommentPriority.valueOf("HIGH");
criteriaList.add(Criteria.where("comments.priority").is(priorityEnum);
query.addCriteria(new Criteria().andOperator(criteriaList.toArray(new Criteria[criteriaList.size()])));
List<BlogPost> posts = mongoOperations.find(query, BlogPost.class);
这 returns 所有至少有一条评论优先级 = 高的博文,这不是我想要的
有什么想法吗?
点符号中的负数位置未记录在案 MongoDB 功能。
不是查看数组,而是将最近评论的评论优先级提高到 post - 在添加评论时将其设置在 post 上。然后你可以简单地通过“最近的评论优先级 post = 高”来查询,而不需要进入数组。
假设有一组博客文章,每篇文章都有一系列评论。评论数组的最后一条评论总是最新的。
{
subject: "This is my post",
comments: [
{"priority": "HIGH", "text": "Hello, my name is...", "createdAt": ISODate("2021-01-18T09:51:32.000Z")},
{"priority": "MEDIUM", "text": "I agree", "createdAt": ISODate("2021-01-19T09:51:32.000Z")},
{"priority": "LOW", "text": "Nice post", "createdAt": ISODate("2021-01-20T09:51:32.000Z")}
]
}
我想创建一个查询:
Give me all the blog posts whose most recent comment has priority "HIGH"
我尝试过的:
Query query = new Query();
List<Criteria> criteriaList = new ArrayList<>();
// other filters added to the criteria list here
CommentPriority priorityEnum = CommentPriority.valueOf("HIGH");
criteriaList.add(Criteria.where("comments.-1.priority").is(priorityEnum);
query.addCriteria(new Criteria().andOperator(criteriaList.toArray(new Criteria[criteriaList.size()])));
List<BlogPost> posts = mongoOperations.find(query, BlogPost.class);
这 returns 结果是一个空数组,即使集合中有博客文章的最后一条评论具有高优先级也是如此
Query query = new Query();
List<Criteria> criteriaList = new ArrayList<>();
// other filters added to the criteria list here
CommentPriority priorityEnum = CommentPriority.valueOf("HIGH");
criteriaList.add(Criteria.where("comments.priority").is(priorityEnum);
query.addCriteria(new Criteria().andOperator(criteriaList.toArray(new Criteria[criteriaList.size()])));
List<BlogPost> posts = mongoOperations.find(query, BlogPost.class);
这 returns 所有至少有一条评论优先级 = 高的博文,这不是我想要的
有什么想法吗?
点符号中的负数位置未记录在案 MongoDB 功能。
不是查看数组,而是将最近评论的评论优先级提高到 post - 在添加评论时将其设置在 post 上。然后你可以简单地通过“最近的评论优先级 post = 高”来查询,而不需要进入数组。