首页 > 解决方案 > 如何创建新集合?

问题描述

我正在构建一个聊天应用程序,其中有GroupConversationsGroupMessages。按照一些 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

标签: iosswiftgoogle-cloud-firestore

解决方案


您没有正确构建文档的路径。文档路径总是在集合名称和文档名称之间交替。要为子集合中的文档构建路径,它将转到集合/文档/子集合/文档。看起来您已经混合了您正在构建的字符串中的最后两个元素。

在我看来,如果您使用方法构建文档而不是尝试构建字符串,则更难出错。像这样的东西:

db
    .collection("GroupMessages")
    .document(groupConvo.documentId)
    .collection("Messages")
    .document(doc.documentId)
    .setData(...)

推荐阅读