你如何做像gun.get({startkey,endkey})这样的事情?
答案 0 :(得分:2)
@ qwe123wsx @sebastianmacias对延迟道歉!最初发布于:https://github.com/amark/gun/issues/479
线规有一个协议,但尚未实现。它看起来像这样:
gun.on('out', {get: {'#': {'>': 'a', '<': 'b'}}});
然而,这还不行。我建议改为:
(1)分页行为从一个应用程序到另一个应用程序是非常不同的,并且我们很难创建“一刀切”的解决方案,因此如果您可以实现自己的*分页将非常有用并将其作为用户模块提供,然后我们可以从您的经验中学习(哪些有效,哪些无效),并将最佳解决方案作为核心的一部分。
(2)你的应用程序可能在没有分页的情况下正常工作,虽然它可以构建(它的目标是1.0之后),然后当你的应用程序变得更受欢迎时,它应该相当容易添加很多重构,一旦你需要它,它就可以使用。
... *如何建立自己的?
关于这一点的很多好文章,我见过的最好的文章来自Neo4j关于如何在图表数据库中执行此操作(也适用于枪支)https://graphaware.com/neo4j/2014/08/20/graphaware-neo4j-timetree.html。
另一个粗略的想法是根据分页或时间对数据进行建模。因此,不是让所有推文进入用户的推文表,而是用户的推文表是DAYS(或几周)的表,然后你把推文放在周表中。现在,当您加载数据时,您可以非常轻松地在周期内扫描/跳过,同时提高带宽效率。
粗糙的PSEUDO代码:
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);
});
});
}