RavenDb在查询期间进行计算

时间:2012-01-27 05:54:25

标签: .net nosql ravendb

我已经多次读过RavenDb在查询时间内不做任何计算。例如,以下是Ayende的文章"The Pain of Implementing LINQ Providers"

的引用
  

RavenDB的一个特性是它绝对没有   查询期间的计算;查询的所有数据已经​​存在   准备。这意味着我们可以实现非常好的查询速度。

但同时还有Live Projections功能,可以在查询过程中进行一些计算。例如,这里我使用排序和求和计算:

TransformResults = (database, post) => from post in posts
                                       order by post.DateTime
                                       select new
                                                {
                                                  Id = post.Id,
                                                  CommentsCount = post.Comments.Sum()
                                                }

所以RavenDb允许动态进行计算,不是吗?

更新。我决定再提供一个示例,您需要在查询时间内对事物进行计算(排序)。任务:为特定的BlogId选择10个最后发表的评论(假设我们的博客系统上有很多博客):

public class LastPostsCommentsIndex: AbstractIndexCreationTask<Post>
{
    public class IndexResult
    {
        public string BlogId {get; set;}
    }

    public class PostComment
    {
        public string PostId { get; set; }
        public DateTime DateTime { get; set; }
        public string Author { get; set; }
        public string Text { get; set; }
    }

    public LastPostsCommentsIndex()
    {
        Map = posts => from post in posts
                       select new { BlogId = post.BlogId };

        TransformResults = (database, posts) => from post in posts
                                                from comment in post.Comments
                                                orderby comment.DateTime descending
                                                select new { PostId = post.Id, DateTime = comment.DateTime, Author = comment.Author, Text = comment.Text };
    }
}

在这种情况下,我们无法对Map索引结果进行排序 - 我们必须动态排序结果。

1 个答案:

答案 0 :(得分:2)

是的,你是对的。但这是挑剔,不是吗?

当有人在这种情况下谈论“计算”时,它是跨多个文档的计算(如Sum,Avg,Count),意思是什么。