如何使用spring数据mongodb在查询中定位数组的最后一项?

xam8gpfp  于 2021-07-23  发布在  Java
关注(0)|答案(1)|浏览(468)

想象一个博客帖子的集合,每个帖子都有一系列的评论。注解数组的最后一个注解总是最近的。

{
  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评论的所有博客文章,这不是我想要的
有什么想法吗?

ukdjmx9f

ukdjmx9f1#

点表示法中的负位置并不是mongodb特性的文档。
不要查看数组,而是将最新的注解优先级从注解提升到post-在添加注解时在post上设置它。然后您可以简单地通过“post=high上最近的注解优先级”进行查询,而不需要深入到数组中。

相关问题