【问题标题】:How to concatenate a Swift dictionary to Firestore map field如何将 Swift 字典连接到 Firestore 地图字段
【发布时间】:2021-04-09 17:05:16
【问题描述】:

我正在尝试在 Firestore 地图字段中连接一个快速字典 。正如我在之前的帖子中看到的那样,我尝试了多种方法,例如 FieldValue.arrayUnion,但它不起作用。有什么直接的方法吗?

//users is the collection and watched is the map field in firestore that I want to update with the dictionary {stringA : stringB}
db.collection("users").document(self.userID).updateData(["watched": {stringA:stringB}])


我想补充一点,在将字典添加到数组字段时它对我有用。但是,它确实存在重复和易于引用的问题。由于 Firestore 有一个地图类型字段,我想知道是否有任何方法可以直接将 swift 字典连接为键值对,如第二张图片所示(手动完成)。

【问题讨论】:

    标签: swift firebase dictionary google-cloud-firestore swiftui


    【解决方案1】:

    如果您只有 1 个值要存储,那么 Firestore 中的数组非常棒。由于您正在尝试存储字典,因此我建议您创建一个子集合。创建子集合的逻辑与创建常规集合(即用户)完全相同,只是路径将从父集合的文档开始。

    在用户的文档中创建一个名为“watched”的子集合,在子集合中您可以添加文档并将文档ID 设置为字符串A。这也允许您查询被监视的集合(例如,如果您需要查看用户是否观看了特定的字符串A)。

    收集路径类似于:

    db.collection("users").document(self.userID).collection("watched").document(stringA)
    

    在新文档中,您将存储 stringB 和其他数据,例如:

    let data: [String:Any] = [
         document_id : stringA, // optional
         watch_time : stringB,
    ]
    

    旁注:Firestore 确实支持直接存储数字。根据您发布的图片,看起来 stringB 是一个数字,您将其作为字符串存储在数据库中。我会尽量避免切换类型。

    【讨论】:

    • 感谢@nicksarno 的回复。我正在尝试使用以下代码创建一个子集合,虽然它确实有效,但它每次都会创建一个新文档。用您的答案替换它并使用 updateData 没有对数据库进行任何更改,所以有没有办法创建一个文档并仅向该文档添加值? db.collection("users").document(self.userID).collection("watchCollection").addDocument(data: [stringA: StringB])
    • 当您调用 .addDocument 时,它将创建一个自动生成的 documentID。您可以通过调用 .document(stringA) 来更新特定文档。 Firebase 有非常好的文档:firebase.google.com/docs/firestore/manage-data/add-data
    • 谢谢 nick,当我使用 setData 时它工作了! db.collection("users").document(self.userID).collection("watchedCollection").document("StringA").setData([valA: valB], merge: true)
    猜你喜欢
    • 1970-01-01
    • 2020-10-04
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    • 2021-06-13
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多