从Firestore获取JSON响应以获取子集合

时间:2020-10-15 10:27:51

标签: json firebase express google-cloud-firestore

我正在尝试为所有医生合并信息:

{"id": "...", "firstName": "...", "lastName": "..."}


我的Firestore数据树如下所示:

enter image description here

我将GET写为:

app.get('/doctors/cardiology/doctors', async (req, res) => {
  try {
    const doctorsDetailsQuerySnapshot = await db.collection("doctors").doc("cardiology").listCollections();
    const doctors: any[] = [];
    doctorsDetailsQuerySnapshot.forEach((doc1) => {
      doctors.push({
        id: doc1.id,
        data: doc1.doc(doc1.id).collection(doc1.id),
      });
    });
    res.status(200).json(doctors);
  } catch (error) {
    res.status(500).send(error);
  }

实际输出:

[
    {
        "id": "919505294523",
        "data": {
            .... metadata....
        }
    },
    {
        "id": "919505294525",
        "data": {
            .... metadata....
        }
    }
]

预期输出:

[
  {
      "id": "919505294523",
      "data": {
          "id": "919505294523",
          "firstName": "B.F.",
          "lastName": "Skinner"
      }
  },
  {
      "id": "919505294525",
      "data": {
          "id": "919505294525",
          "firstName": "Carl",
          "lastName": "Rogers"
      }
  }
]

有人可以帮助我的新手吗?几乎卡了2个小时。

1 个答案:

答案 0 :(得分:1)

回答有关数据库结构的问题。

现在您的结构如下:

\collection(doctors)
   \document(specialization)
      \collection(doctorId)
         \document(doctorID)

因此,您有一个doctors集合,其中包含每个专业的文档(例如cardiology),在每个专业下,每个医生都有一个集合,其中包含带有Doctor字段的文档。 / p>

相反,我会建议一个更简单,更直接的结构,如下所示:

\collection(Doctors)
  \document(doctorID)

我的建议是收集Doctors,其中包含每位医生的文件。在文档的字段中,您可以包括已经存在的字段(firstName,id,lastName),并再添加一个字段specialization(例如“专业:心脏病学”)。

这是一个非常简单的实现,您仍然可以使用where('specialization', '==', 'cardiology')根据医生的专长来查询医生。有关where()方法的更多信息,请参见here