如何仅获取具有特定子文档ID的Firebase文档,或有其他方法?

时间:2020-03-03 09:27:44

标签: firebase google-cloud-firestore

我需要获取一个包含特定子文档ID的文档,以便在不查询整个集合的情况下计算最大和最小数据。

文档结构与此类似。

Collection: Student
    /* unrelated field */
    The document
    Subcollection: Grade
      Document: Math
        Subcollection: Score
          Document: Johny

查询将获得子文档ID为Johny的所有数据,因此我可以计算Johny评分的最小和最大分数以对分数进行归一化。

如果有替代的数据结构选择可以完成此任务,请随时推荐作为答案。我仍然可以迁移所有数据,因为大多数文档都没有子集合。

1 个答案:

答案 0 :(得分:0)

在当前结构上,您可以像这样查询它:

putSerializable("key",object);

但是,这是非常低效的,因为您可以看到每个年级执行2次读取+ 1次读取,因此,如果您愿意更改数据结构,则像这样简单得多:

var JohnyScore = []
db.collection("Student").get().then(function(doc) {
    doc.collection("Grade").get().then(function(snapshot) {
        snapshot.forEach(function(doc2) {
            doc2.collection("Score").where("id", "==", "Johny").get().then(function(snapshot2) {
                JohnyScore.push(snapshot2.data());
            });
        });
    });
});

然后您可以使用以下命令进行查询:

Collection: Student
   Document
      id: Johny
      Subcollection: Grade
         Document 
           id: Math
           score: 10
         Document
           id: History
           score: 8

这意味着您仅执行2次读取。

希望这会有所帮助。