【发布时间】:2017-08-24 13:06:01
【问题描述】:
我正在创建一个具有类似于 Tinder 的“卡片堆栈”的应用,并带有 Firebase 实时数据库后端。每张卡片将是一个新的未读帖子,如果用户用完新帖子,他们将用完卡片。但是我不知道为此构建数据的最佳方法。我可以将已读帖子的 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
}
});
});
【问题讨论】:
-
我认为您的解决方案是正确的。您还可以使用 Cloud Functions 进行排序工作。
标签: javascript firebase firebase-realtime-database