【问题标题】:Firestore: set fields of implicitly created documentsFirestore:设置隐式创建文档的字段
【发布时间】:2019-03-01 15:12:44
【问题描述】:

我正在使用 Google Firestore 构建一个群聊系统。对于每个组,我使用自定义 Firestore 文档 ID 来标识消息所属的聊天室。每次用户向房间发送消息时,即使具有该 ID 的文档不存在,此 sn-p 也会起作用,因为文档是隐式创建的:

this._firestore
        .collection('rooms')
        .doc('group' + group.id)
        .collection('messages')
        .add({
            uid: message.from.id,
            content: message.content,
            date: firebase.firestore.FieldValue.serverTimestamp()
        })

此方法的好处在于,在一个用户发送消息之前,不会创建代表聊天室的文档。但是,如果文档存在或它具有createdAt 属性,我如何存储频道创建时间而不必每次发送消息时检查?是否有任何信号或事件可以检测隐式创建的文档?

【问题讨论】:

    标签: google-cloud-firestore angularfire2


    【解决方案1】:

    在您提供的 sn-p 中没有隐式创建文档。如果顶层中的文档还不存在,那么您最终只会得到一个没有“父”文档的子集合。在 Firestore 控制台中,文档 ID 以斜体显示这一事实表明:文档 ID 存在,但没有文档数据。

    可以创建一个云函数来检测这种情况并在顶级集合中创建文档。这也是您在该文档中放置默认值的地方。

    【讨论】:

    • 好的,但是我怎样才能从代码中检测到这种情况,而不必检查存储的每条消息是否存在父文档?
    • 我没有办法做到这一点。当有人启动新聊天室时,您通常希望在父集合中创建文档。此时客户端知道这是一个新房间,因为该房间没有消息和元数据(通常存储在父文档中)。
    猜你喜欢
    • 2018-12-24
    • 2020-10-01
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    • 2019-10-16
    • 2019-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多