您好,登錄后才能下訂單哦!
這篇文章主要講解了“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中的遞歸索引如何使用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。