1

你如何做类似 gun.get({startkey, endkey}) 的事情?

以前:https ://github.com/amark/gun/issues/479

4

2 回答 2

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(或周)的表,然后您将推文放入周表中。现在,当您加载数据时,您可以非常轻松地扫描/跳过一周,同时它具有超强的带宽效率。

粗略的伪代码:

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);
    });
  });
}
于 2018-02-23T17:27:31.130 回答
0

现在我们可以使用https://gun.eco/docs/RAD#lex

gun.get(...).get({'.': {'>': startkey, '<': endkey}, '%': 50000}).map().once(...)
于 2022-02-28T04:14:34.687 回答