ios - 如何创建新集合?
问题描述
我正在构建一个聊天应用程序,其中有GroupConversations
和GroupMessages
。按照一些 Firestore YouTube 视频的示例,我选择以这种方式构建我的数据:
GroupConversation 的 ID 是与该 GroupConversation 关联的 GroupMessages 集合的 ID。然后在该文档内部应该是一个名为Messages
保存文档的新集合。
这有意义还是我把事情复杂化了?我似乎无法Messages
在我的 Swift 代码中创建该集合或为其设置任何内容
GroupConversations
id
title
desc
memberIds
GroupMessages
GroupConversationID
createdAt: Date // just because I need a key and a document?
Messages (new collection)
Message1
Message2
Message3
谢谢
编辑:添加了 Swift 代码
let db = Firestore.firestore()
var data: [String: Any] = [
"text": title,
"senderUsername": username,
"createdAt": Date(),
"updatedAt": Date()
]
let creationData: [String: Any] = [
"text": "Group Created",
"createdAt": Date()
]
let doc = db.collection("GroupMessages").addDocument(data: creationData)
db.document("GroupMessages/\(groupConvo.documentId)/\(doc.documentID)/messages").setData(data) { error in
if error == nil {
completion()
}
}
在我的控制台中,我看到创建了一个新的 GroupMessage 对象,但不是该 GroupMessage 的子集合,称为messages
解决方案
您没有正确构建文档的路径。文档路径总是在集合名称和文档名称之间交替。要为子集合中的文档构建路径,它将转到集合/文档/子集合/文档。看起来您已经混合了您正在构建的字符串中的最后两个元素。
在我看来,如果您使用方法构建文档而不是尝试构建字符串,则更难出错。像这样的东西:
db
.collection("GroupMessages")
.document(groupConvo.documentId)
.collection("Messages")
.document(doc.documentId)
.setData(...)
推荐阅读
- python - 按降序排序链表python
- flutter - 如何更改 Flutter 中未选中的 Tab Bar 的背景?
- java - 在回收器视图适配器中实现 openUrl 函数的问题
- ios - 带有 kCLLocationAccuracyBestForNavigation 的 CLLocationManager.desiredAccuracy 有时会捕捉到道路
- javascript - 角度反应形式的补丁 mattimepicker
- java - Spring boot 中配置文件特定的 application.properties 文件和多个配置文件的默认值注入
- android - JaCoCo 覆盖率报告中检测到的 `encode()` 函数是什么(对于 Kolin)?
- go - 如何正确使用“go get”?
- arduino - 安装模块 node-red-node-arduino 失败:
- c++ - 如果我删除一个对象指针重载new,它是否也会释放动态分配给数据成员的内存?