想象一个博客帖子的集合,每个帖子都有一系列的评论。注解数组的最后一个注解总是最近的。
{
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")}
]
}
我想创建一个查询,它说:
给我所有最近评论优先级为“高”的博客帖子
我尝试过:
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);
这将返回一个空数组作为结果,即使集合中有最后一条评论具有高优先级的博客文章
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);
这将返回至少有一个priority=high评论的所有博客文章,这不是我想要的
有什么想法吗?
1条答案
按热度按时间ukdjmx9f1#
点表示法中的负位置并不是mongodb特性的文档。
不要查看数组,而是将最新的注解优先级从注解提升到post-在添加注解时在post上设置它。然后您可以简单地通过“post=high上最近的注解优先级”进行查询,而不需要深入到数组中。