【问题标题】:RavenDb Make computations during queryRavenDb 在查询期间进行计算
【发布时间】:2012-01-27 16:00:06
【问题描述】:

我读过很多次 RavenDb 在查询期间不做任何计算。例如这里引用了 Ayende 的文章 "The Pain of Implementing LINQ Providers"

RavenDB 的一个特点是它绝对不会执行 查询期间的计算;查询的所有数据已经 准备好了。这意味着我们可以实现非常好的查询速度。

但同时有实时投影功能,允许在查询期间进行一些计算。比如这里我使用排序和求和计算:

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

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

更新。我决定再提供一个示例,您实际上必须在查询期间计算(排序)事物。任务:为特定的 BlogId 选择 10 个最后发表的 cmets(假设我们的博客系统上有很多博客):

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 };
    }
}

在这种情况下,我们无法对地图索引结果进行排序 - 我们必须即时对结果进行排序。

【问题讨论】:

    标签: .net nosql ravendb


    【解决方案1】:

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

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

    【讨论】:

    • 我只是想澄清一下。实际上,我不确定是否可以在 TransformResults 期间进行一些更繁重的跨文档计算。
    • 我想多了。至少我可以对 TransformResults 进行排序。
    • 嗯,我不明白你所说的“对 TransformResults 排序”是什么意思。
    • 我已经修改了问题中的示例。请看一下
    • 我在更新中又添加了一个示例
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-09
    • 1970-01-01
    • 2012-11-27
    • 2018-10-03
    • 1970-01-01
    • 2012-03-08
    相关资源
    最近更新 更多