欢迎光临
我们一直在努力

RavenDB中的递归索引如何使用

这篇文章主要讲解了“RavenDB中的递归索引如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“RavenDB中的递归索引如何使用”吧!

我们来看下面的索引(Issues/Permissions):

// Issues/Permissions index definition

map("Issues", issue =>{
   var groups = issue.Groups.reduce(recurse_groups, {});
   return  { Groups: Object.keys(groups), Users: issue.Users };
});

function recurse_groups(accumulator, grpId) {
    if(grpId == null || accumulator.hasOwnProperty(grpId))
        return accumulator;
    accumulator[grpId] = null; 
    var grp = load(grpId, "Groups");
    if(grp == null || grp.Parents == null)
        return accumulator;
    return grp.Parents.reduce(recurse_groups, accumulator);
}

这是一个 JS 索引,它在 Issues 集合上有一个 map() 函数。对于每个问题,我们为问题的用户和允许访问它的组(递归地)编制索引。

这个查询有两个子句;要么直接分配给我们,要么通过一个小组分配给我们。这里的关键是在recurse_groups () 和里面,索引中的load()调用。它向上扫描定义的组及其父级,直到我们在索引中有一个易于搜索的简单结构。

RavenDB 将确保每当索引中的load()引用的文档被更新时,所有引用它的文档都将被重新索引。在我们这里的情况下,每当更新组时,我们都会重新索引所有相关问题以匹配新的权限结构。

RavenDB 的核心原则之一是您可以将更多工作推向索引并保持查询快速和简单。这是一个很好的例子,说明我们如何以一种非常优雅的方式将工作推送到后台索引的方式排列数据。

感谢各位的阅读,以上就是“RavenDB中的递归索引如何使用”的内容了,经过本文的学习后,相信大家对RavenDB中的递归索引如何使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是云搜网,小编将为大家推送更多相关知识点的文章,欢迎关注!

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。