【问题标题】:Attach listener to any Firestore collect change将侦听器附加到任何 Firestore 收集更改
【发布时间】:2021-10-16 19:01:09
【问题描述】:

我的文档结构为:

/uploads/${USER_ID}/items/${UUID}

我可以成功监听路径末尾文档的变化,例如

firestore
    .collection("uploads")
    .document(configService.getUserId())
    .collection("items")
    .whereEqualTo("owner", configService.getUserId())
    .addSnapshotListener(this::onEvent);
}

但是我怎样才能在/uploads/* 上收听所有更改,而不遍历所有附加侦听器的文档(似乎效率很低)?

我天真地尝试过

firestore
    .collection("uploads")
    .addSnapshotListener(this::onEvent);
}

但是,当沿路径进行更改时不会触发它。

【问题讨论】:

    标签: java google-cloud-firestore firebase-admin


    【解决方案1】:

    您要查找的内容称为collection group query。有了它,您可以收听所有 items 子集合中的所有文档:

    final Query items = db.collectionGroup("items").whereEqualTo("owner", configService.getUserId());
    final ApiFuture<QuerySnapshot> querySnapshot = items.get();
    for (DocumentSnapshot document : querySnapshot.get().getDocuments()) {
      System.out.println(document.getId());
    }
    

    如果您需要知道某个上传的特定项目属于哪个,您可以致电document.getReference() 以获取对项目文档的引用,然后从那里关注getParent trail

    【讨论】:

    • 谢谢你,collectionGroup 是我所追求的。在我的用例中,我可以使用 firestore.collectionGroup("items").addSnapshotListener(this::onEvent); 做我想做的事
    猜你喜欢
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    • 2023-04-08
    • 2019-07-20
    • 2020-01-07
    • 2022-08-03
    • 2021-08-12
    • 1970-01-01
    相关资源
    最近更新 更多