RavenDB内部集合分页

本文关键字:分页 集合 内部 RavenDB | 更新日期: 2023-09-27 18:20:00

我是RavenDB的新手,据我所知,当你索要文档时,你会得到整个文档(除非你使用某种索引等)。

示例场景

以博客文档场景为例,文档如下所示:

public class Blog
{
   public string Id { get; set; }
   public string AuthorId { get; set; }
   public DateTime PublishedUTC { get; set; }
   public string Title { get; set; }
   public string Content { get; set; }
   public Comment[] Comments { get; set; }
}
public class Comment
{
   public string Id { get; set; }
   public string AuthorId { get; set; }
   public DateTime PublishedUTC { get; set; }
   public string Content { get; set; }
}

假设我们有一个网页/blogs/posts/。该页面显示一组分页的博客文章和每个博客的评论。我了解如何使用Skip()Take()方法对博客文档进行分页。我想将分页逻辑应用于每个博客文档的内部Comments集合。

我的问题

  1. 我该如何获得一组分页的博客和他们的评论?

  2. 考虑到分页要求,你会更改给定的博客吗记录场景,使评论不存在于博客中文件

RavenDB内部集合分页

  1. 如果你使用.Skip().Take()来获得一个分页的博客文章列表,那么你已经做对了。为了在注释上也得到一个分页列表,您可以在内存列表上使用相同的方法(然后将对对象进行linq)。因此,我建议将Comment[]数组更改为List<Comment>,这样就有了这两种linq方法。

  2. 如果我更改post文档,使其不包含注释,我就不会这样做,因为分页(没有缺点,请参阅我的第一点),而是因为在数据库请求中节省了带宽。我会有两个文件,一个包含帖子,另一个包含所有评论。这样,您就不需要每次显示帖子列表时都加载所有评论,但在实际需要时仍然具有文档数据库的优势。使用RavenDB还可以很容易地在评论项上定义索引,以防您在其他地方(侧边栏左右)需要它们。你可以在RaccoonBlog中找到这个实现。