在FireStore / Document DB中高效存储和获取喜好

时间:2018-05-02 15:19:56

标签: firebase google-cloud-firestore

我有一个页面,其中包含每个帖子的帖子和赞。

在FireStore中有一系列帖子和一组喜欢的内容,当用户喜欢或不喜欢带云功能的帖子时,我会更新total_likes和最近喜欢的数组。

但是,如果当前登录的用户不喜欢,我无法弄清楚每个帖子的显示方式。有什么方法可以做到这一点。

任何指针?

2 个答案:

答案 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。

希望这会有所帮助!