我有一个页面,其中包含每个帖子的帖子和赞。
在FireStore中有一系列帖子和一组喜欢的内容,当用户喜欢或不喜欢带云功能的帖子时,我会更新total_likes和最近喜欢的数组。
但是,如果当前登录的用户不喜欢,我无法弄清楚每个帖子的显示方式。有什么方法可以做到这一点。
任何指针?
答案 0 :(得分:2)
一种解决方案是在您的Firestore数据库中创建另一个用户创建文档的集合,您可以在其中保存(并更新)包含该用户喜欢的所有帖子的对象。 / p>
喜欢
- likers (Collection)
- UserUID (doc)
- postIds {
post1_UID: true,
post2_UID: true
}
这个想法是使用文档中描述的技术,在这里:https://firebase.google.com/docs/firestore/solutions/arrays#solution_a_map_of_values
我不知道您在前端使用哪种语言,但在JavaScript中您会这样做:
var postToTestId = ....; <- You set this value as you need (e.g. as a function parameter)
firebase.auth().signInWithEmailAndPassword("...", ".....")
.then(function (info) {
var postId = 'azer';
return db.collection('likers')
.where('postIds.'+ postToTestId, '==', true)
.get();
})
.then(function(querySnapshot) {
if (querySnapshot.size > 0) {
console.log("USER LIKES THIS POST!!!");
}
})
.catch(function (error) {
console.log(error);
});
我认为没有任何解决方案没有存储每个用户喜欢的所有帖子...
答案 1 :(得分:1)
我相信您可能需要查看数据聚集。即使此示例与Angular一起使用,我也在不同的应用程序中使用相同的原理:https://angularfirebase.com/lessons/firestore-cloud-functions-data-aggregation/
或者,您可以将用户喜欢的post_id存储在自己的“ like_array”中。知道用户当前看到的帖子后,您可以将显示的post_id与用户的(单个对象)“ like_array”进行交叉引用,以确定他/她是否喜欢特定帖子。从长远来看,您可以根据几天或几周消除like_arrays的歧义,而仅根据显示的帖子查询当天和过去一天/一周的like_arrays。如果您要处理帖子的类别,则适用类似的规则:不同类别的不同like_arrays。
希望这会有所帮助!