【发布时间】:2018-09-19 03:41:33
【问题描述】:
我正在使用一个名为“Documento”的对象将数据存储在 Firestore 中,然后当我检索这些数据时,我将其存储在 JSON 结构中。现在,我的问题是现在我要完成三个查询。一个是时间表,另一个是医生,另一个是他的类型。所有这三个都存储在不同的查询中,现在我的日程安排需要有一个来自医生集合的医生姓名和他在我的第三个集合中的类型。
因此,我想知道一种方法将它们查询在一起并将它们合并到一个对象中,这样我就可以将我的患者信息与他的医生信息一起显示,从而生成我的日程安排,该日程安排将进入 HTML。
这是我的 firebase/firestore 结构的屏幕截图:
下面是我如何从 Firestore 中检索我的数据作为 JSON 结构中的对象:
carregarPerfil(){
var query = firebase.firestore().collection("Usuario")
var auxint = 0;
this.dataAux
let auxString = '[';
query.where('Documento.nome', '==', 'Merlin').where('Documento.login', '==', 'merlin').get().then(res => {
res.forEach(item => {
auxint++;
auxString += '{"id":"' + item.id + '","Usuario":' + JSON.stringify(item.data()) + '}';
console.log(item);
if (res.size != auxint)
auxString += ', ';
})
auxString += ']';
this.dataJSON = JSON.parse(auxString);
this.Usuario = this.dataJSON;
console.log(this.Usuario);
}).catch(err => {
console.log('algum erro ' + err);
});
}
我曾尝试阅读 firestore 上的文档,但由于它没有将其视为 JSON,并且没有显示如何使用 3 个查询逐步完成,这对我来说很难,因此我需要一些帮助。
【问题讨论】:
-
您可以将三个查询链接与
then(),一个接一个。事实上,由于get()方法是异步的并返回一个promise,因此您必须等待promise 解析才能使用查询返回的值。您应该提供有关您的数据结构(即 3 个集合)的更多详细信息,以便社区能够为您提供帮助。另一种方法是对您的数据进行反规范化,例如,将医生的类型添加到医生文档中,将查询次数减少到 2。 -
我已经用我当前结构的更详细的图片更新了主帖子,无论如何你能提供一个例子,说明在处理承诺后我将如何链接这些查询?
-
我是否理解正确,在议程文档中,您具有其他三个文档(Especialidade、Medico 和 Patiente)的 ID,并且您希望在最后从这三个文档中获取信息(一口气)?
-
是的,这正是我需要做的,但我不知道,我需要 Medico 的 nome 属性,我需要 Paciente 的 nome 属性,我需要 Especialidade 的 nome,并且用议程数据列出它们,基本上是某种外键,非规范化需要一段时间,因为我不确定处理的人是否能胜任这项工作
-
看我的回答。请注意,在答案中,我们不链接了多个 Promise,因为我们并行而不是按顺序执行它们。相反,我们使用的是
Promise.all()。
标签: angular firebase ionic-framework google-cloud-firestore