【问题标题】:How to create document with subcollection如何使用子集合创建文档
【发布时间】:2020-09-17 14:36:51
【问题描述】:

我找不到如何创建一个没有任何字段的新文档,但只有一个子集合 - 消息(并且此消息集合将包含一些字段)。 这就是我想做的。但我不想在已经存在的文档中创建子集合。我想在其中创建新文档和子集合。

老实说,我停止了:

let chatRef = db.collection("chat_event").add({

})

【问题讨论】:

    标签: javascript firebase google-cloud-firestore


    【解决方案1】:

    This answer 会有很大帮助。

    let chatRef = db
     .collection("chat_event").document("chat1")
     .collection("messages").document("message1");
    

    如果您不想对父文档的 ID 进行硬编码,或者您想要使用 Firestore 生成的 ID。然后先从firestore的createId()函数中获取id。

    let chatEventId = db.createId();
    let chatRef = db
     .collection("chat_event").document(chatEventId)
     .collection("messages").document("message1");
    

    您仍然可以为子集合的文档使用自动生成的 id:

    let chatEventId = db.createId();
    let messageId = db.createId();
    let chatRef = db
     .collection("chat_event").document(chatEventId)
     .collection("messages").document(messageId);
    

    请注意,firestore 的自动生成 ID 是完全随机的,因此文档不会按任何时间顺序存储。如果您无论如何都需要一些排序,则可以在插入数据或使用时间戳信息更新文档时向这些文档添加时间戳。

    docRef.update({
      timestamp: firebase.firestore.FieldValue.serverTimestamp()
    });
    

    这样,您可以在控制台和您自己的查询中按时间顺序排序。

    Check out this answer for more information on auto-generating IDs

    【讨论】:

    • 我看到了,但在这种情况下,文档“chat1”已经存在。我想创建新文档“chat1”,但带有 Firebase 会给我的 id
    • chat1 文档不必存在,此代码也能正常工作。如果它还不存在,则不会创建 chat1 document,但路径会存在。我建议尝试一下并在控制台中查看结果。'
    • 现在我知道了我想要的一切:P 但我很好奇 firebase id 是否完全随机,那么是否有机会重复?
    • 几乎没有机会重复。与实时数据库相比,在 Firestore 中使用随机 ID 实际上是为了在 Firestore 中减少 ID 重复的可能性,在实时数据库中 ID 在时间的帮助下生成并且可能发生冲突。
    猜你喜欢
    • 2021-12-13
    • 2021-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-29
    相关资源
    最近更新 更多