你如何做类似gun.get({startkey, endkey})这样的事情?
最佳答案
@qwe123wsx @sebastianmacias 对于延迟表示歉意!最初发布于:https://github.com/amark/gun/issues/479
线路规范有一个协议(protocol),但尚未实现。它看起来像这样:
gun.on('out', {get: {'#': {'>': 'a', '<': 'b'}}});
但是这还不起作用。我建议改为:
(1) 一个应用程序与另一个应用程序之间的分页行为非常不同,我们很难创建一个“一刀切”的解决方案,因此如果您可以实现自己的*分页,将会非常有帮助并将其作为用户模块提供,然后我们可以从您的经验中学习(哪些有效,哪些无效),并将最佳解决方案作为核心的一部分。
(2) 您的应用程序可能会在没有分页的情况下正常工作,同时它可以被构建(它的目标是 1.0 之后),然后随着您的应用程序变得越来越流行,应该很容易添加而无需分页大量重构,一旦您需要它并且它可用。
... * 如何构建自己的?
关于这方面有很多好文章,我见过的最好的一篇来自 Neo4j,介绍了如何在图形数据库中做到这一点(也适用于枪)https://graphaware.com/neo4j/2014/08/20/graphaware-neo4j-timetree.html .
另一个粗略的想法是根据分页或时间对数据进行建模。因此,与其将所有推文放入用户的推文表中,不如将用户的推文表设为天(或周)表,然后将推文放入周表中。现在,当您加载数据时,您可以非常轻松地扫描/跳过每周,同时具有 super 带宽效率。
粗略的伪代码:
function onTweetSend(tweet){
gun.get('user').get('alice').get('tweets').get(Date.uniqueYear() + Date.uniqueWeek()).set(tweet)
}
function paginateUserTweet(howMany, cb){
var range = convertToArrayOfUniqueWeekNamesFromToday(howMany);
var all = [];
range.forEach(function(week){
gun.get('user').get('alice').get('tweets').get(week).load(function(tweets){
all.push(tweets);
if(all.length < range.length){ return }
all = flattenArray(all);
cb(all);
});
});
}
关于gun - GUN 中如何进行分页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48953233/