我已经多次读过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索引结果进行排序 - 我们必须动态排序结果。
答案 0 :(得分:2)
是的,你是对的。但这是挑剔,不是吗?
当有人在这种情况下谈论“计算”时,它是跨多个文档的计算(如Sum,Avg,Count),意思是什么。