我正在尝试为所有医生合并信息:
{"id": "...", "firstName": "...", "lastName": "..."}
我的Firestore数据树如下所示:
我将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个小时。
答案 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