【问题标题】:How to access the sub-collection of a queried document in Firestore?如何访问 Firestore 中查询文档的子集合?
【发布时间】:2020-03-03 11:35:15
【问题描述】:

上下文:下面是我在 Firebase Firestore 中的集合和文档的屏幕截图。基本上,每个交易文档都有自己的字段和其中的聊天集合。

我需要什么:我的目标是使用特定的 handler_id 查询文档并访问其中的聊天集合。

发生了什么:此查询仅返回交易字段

 db.collection("transaction").where("handler_id", "==", 3)

如何在查询的文档中包含聊天收藏?您对如何更有效地构建数据有什么建议吗?

【问题讨论】:

    标签: javascript firebase google-cloud-firestore


    【解决方案1】:

    Firestore 中的查询是浅层的,这意味着当您通过查询查询文档时,您只能获取您正在查询的集合中的相应文档,而不是其子集合中的文档。

    所以需要先查询父transaction文档(这是一个异步过程),拿到后查询子集合(也是一个异步过程)。

    如果我们假设在transaction 集合中只有一个文档为handler_id = 3,您将按照以下几行进行操作:

    db.collection("transaction").where("handler_id", "==", 3).get()
    .then(querySnapshot => {
       return querySnapshot.docs[0].ref.collection('chat').get();
    })
    .then(querySnapshot => {
        querySnapshot.forEach(doc => {
            // doc.data() is never undefined for query doc snapshots
            console.log(doc.id, " => ", doc.data());
        });
    });
    

    如果要设置chat 子集合的侦听器,只需调用onSnapshot() 方法而不是get() 方法,如下:

    db.collection("transaction").where("handler_id", "==", 3).get()
    .then(querySnapshot => {
       querySnapshot.docs[0].ref.collection('chat').onSnapshot(querySnapshot => {
            // Do whatever you want with the querySnapshot
            // E.g. querySnapshot.forEach(doc => {...})
            // or querySnapshot.docChanges().forEach(change => {...})
            // See https://firebase.google.com/docs/firestore/query-data/listen#listen_to_multiple_documents_in_a_collection
        });
    }); 
    

    【讨论】:

    • 好的,我知道在单个查询中不可能做到这一点,因为 Firestore 中的查询很浅。但是,是否可以在聊天集合上添加 onSnapshot 功能?
    • 子集合与查询和侦听器的顶级集合没有什么不同。只需构建对它的引用,然后像其他任何引用一样使用该引用。
    • @paulaysabellemedina 正如 Doug 解释的那样,您可以在 chat 子集合上调用 onSnapshot() 方法。查看更新。另外,如果您认为它可以解决您的问题,请接受答案,请参阅stackoverflow.com/help/someone-answers
    猜你喜欢
    • 1970-01-01
    • 2020-07-26
    • 2020-05-08
    • 2021-09-25
    • 2021-04-08
    • 2021-07-12
    • 2018-06-19
    • 1970-01-01
    • 2020-12-02
    相关资源
    最近更新 更多