用于获取未读帖子的Firebase

时间:2017-08-24 13:06:01

标签: javascript firebase firebase-realtime-database

我正在使用类似于Tinder的“卡片堆栈”创建一个带有Firebase Realtime DB后端的应用程序。每张卡片都是一张新的未读帖子,如果用户用完了新帖子,他们就会用完卡片。但是,我不知道为此构建数据的最佳方法。我可以在用户下存储阅读帖子的ID,然后当我观看帖子提要时,我可以过滤掉客户端的阅读帖子吗?

这看起来有点乱,而且表现不是很好的选择。有更好的选择吗?

编辑:我正在思考的粗略代码:

数据示例

posts:
     "-KibasdkjbSAdASd": {
          title: 'New Post',
          body: {
              ...
          }
     },
     "-KisadBVsdadSd": {
          title: 'New Post 2',
          body: {
               ..
          }
     }
     "-KibaFNQsicaASd": {
          title: 'New Post 3',
          body: {
              ...
          }
     }

users :      
     "-KisadBVsdadSd": {
          name: 'Tom',
          readPosts: {
              "-KibasdkjbSAdASd": {
                   title: 'New Post',
                   body: {
                        ...
                   }
              },
              "-KisadBVsdadSd": {
                  title: 'New Post 2',
                  body: {
                       ..
                 }
             }
        }
     }

代码

const rootRef = firebase.database.ref();
const postRef = rootRef.child("posts");
const readPostRef = rootRef.child("users/"+uid+"/readPosts");

let readPosts= [];

//Get initial list of read posts
readPostRef.once("value", function(snapshot) {
  readPosts = Object.keys(snapshot);
});
//Update read posts when added
readPostRef.on("child_added", function(snapshot) {
  readPosts = Object.keys(snapshot);
});

 //Get list of posts, filtered on read post array
urlRef.on("value", function(snapshot) {
  snapshot.forEach(function(child) {
    if(!readPosts.includes(child.key)){
       //Unread post
    }
  });
});

2 个答案:

答案 0 :(得分:0)

这取决于您向用户显示卡片的顺序。

如果您以可预测的顺序显示它们(例如从最新到最旧),您只需记住用户看到的最后一张卡的ID。

如果您以随机或个性化的顺序显示它们,您可能确实需要准确跟踪每个用户已经看过的卡片。

我不确定为什么那会很乱或表现不好。因此,如果您想要更好的选择,您必须展示如何实施凌乱/慢速选项。

答案 1 :(得分:0)

我遇到了同样的设计问题。我只看到两个选择,也许还有其他选择!

1)下载每个帖子,然后忽略已阅读的帖子。帖子很多时很贵。

2)将每个帖子的副本保存到每个用户帐户,并允许他们在阅读后将其删除。当用户很多时很贵。