您好,登錄后才能下訂單哦!
這篇文章主要講解了“RavenDB中的遞歸索引如何使用”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“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);
}
這是一個(gè) JS 索引,它在 Issues 集合上有一個(gè) map() 函數(shù)。對于每個(gè)問題,我們?yōu)閱栴}的用戶和允許訪問它的組(遞歸地)編制索引。
這個(gè)查詢有兩個(gè)子句;要么直接分配給我們,要么通過一個(gè)小組分配給我們。這里的關(guān)鍵是在recurse_groups () 和里面,索引中的load()調(diào)用。它向上掃描定義的組及其父級,直到我們在索引中有一個(gè)易于搜索的簡單結(jié)構(gòu)。
RavenDB 將確保每當(dāng)索引中的load()引用的文檔被更新時(shí),所有引用它的文檔都將被重新索引。在我們這里的情況下,每當(dāng)更新組時(shí),我們都會重新索引所有相關(guān)問題以匹配新的權(quán)限結(jié)構(gòu)。
RavenDB 的核心原則之一是您可以將更多工作推向索引并保持查詢快速和簡單。這是一個(gè)很好的例子,說明我們?nèi)绾我砸环N非常優(yōu)雅的方式將工作推送到后臺索引的方式排列數(shù)據(jù)。
感謝各位的閱讀,以上就是“RavenDB中的遞歸索引如何使用”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對RavenDB中的遞歸索引如何使用這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。