RavenDB内部集合分页

时间:2012-01-12 02:45:04

标签: c# nosql ravendb

我是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()方法在Blog文档上使用分页。我想将分页逻辑应用于每个Blog文档的内部Comments集合。

我的问题

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

  2. 根据分页要求,您是否会更改给定的博客 文档场景,以便评论不在博客中 文件?

1 个答案:

答案 0 :(得分:3)

  1. 如果您使用.Skip().Take()来获取博客帖子的分页列表,那么您已经做得对了。为了在注释上获得分页列表,您可以在内存列表中使用相同的方法(然后它将是linq-to-objects)。因此,我建议您将Comment[]数组更改为List<Comment>,然后您可以使用这两种linq方法。

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

  3. 中找到这个实现