在Firestore中存储字典值时的逻辑问题

时间:2019-07-09 06:15:11

标签: ios swift firebase google-cloud-firestore

我正在尝试重新创建instagram关注者和关注功能,但逻辑似乎存在错误。代码没有错误。现在,当按下“关注”按钮时,我正在做的是创建一个名为“用户关注”的集合,将“当前UID”添加为“文档ID”,然后将以下目标用户数据存储为[targetuid: 1]。同时,我创建一个名为“ user-followers”的集合,将“ Target UID”添加为“ document ID”,然后将关注者数据存储为[currentuid:1]。这里的问题是,仅关注一个用户时,它就可以工作。当我尝试关注另一个用户时,现有的关注用户数据将被我关注的新用户覆盖,而不是附加数据。

示例:假设currentUser是A,user1 = B,user2 = C 当我跟随user1和user2时,我在firestore中的数据库应反映为:

user-following -> A -> [B:1,C:1]
user-followers -> B -> [A:1]
user-followers -> C -> [A:1]

以上内容翻译为集合-> documentID->字典值 问题是我没有得到上述结果。相反,当我跟随user2时,user1的值将被覆盖。因此,仅存储了一个字典值。

我知道问题出在我试图在文档ID下创建字段的方式中。我知道我可以创建一个字典并附加值,但是我认为对于原本简单的解决方案来说,这是很多代码。

func follow(){
        guard let currentUid = Auth.auth().currentUser?.uid else 
         {return}
        guard let uid = uid else {return}
        self.isFollowed = true

        // Add followed user to current user-following structure
        Firestore.firestore().collection("user- 
         following").document(currentUid).setData([uid:1])

        // Add current user to followed user-follower structure
        Firestore.firestore().collection("user- 
         followers").document(uid).setData([currentUid:1])
        }

1 个答案:

答案 0 :(得分:0)

没关系。意识到我必须使用合并。

Firestore.firestore().collection("user- 
         following").document(currentUid).setData([uid:1], merge: true)