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
集合。
我的问题
我该如何获得一组分页的博客和他们的评论?
考虑到分页要求,你会更改给定的博客吗记录场景,使评论不存在于博客中文件
-
如果你使用
.Skip()
和.Take()
来获得一个分页的博客文章列表,那么你已经做对了。为了在注释上也得到一个分页列表,您可以在内存列表上使用相同的方法(然后将对对象进行linq)。因此,我建议将Comment[]
数组更改为List<Comment>
,这样就有了这两种linq方法。 -
如果我更改post文档,使其不包含注释,我就不会这样做,因为分页(没有缺点,请参阅我的第一点),而是因为在数据库请求中节省了带宽。我会有两个文件,一个包含帖子,另一个包含所有评论。这样,您就不需要每次显示帖子列表时都加载所有评论,但在实际需要时仍然具有文档数据库的优势。使用RavenDB还可以很容易地在评论项上定义索引,以防您在其他地方(侧边栏左右)需要它们。你可以在RaccoonBlog中找到这个实现。