如何将 Swift 字典连接到 Firestore 地图字段

问题描述

我正在尝试在 firestore 地图字段中连接一个 swift 字典 。正如我在以前的帖子中看到的那样,我尝试了多种方法,例如 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 字典直接连接为键值对,如第二张图片所示(手动完成)。

enter image description here

enter image description here

解决方法

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

在用户的文档中创建一个名为“watched”的子集合,在子集合中您可以添加文档并将 documentID 设置为等于 stringA。这还允许您查询观看的集合(例如,如果您需要查看用户是否观看了特定的 stringA)。

收集路径类似于:

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

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

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

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