angular - 从 firestore 查询 3 个集合
问题描述
我正在使用一个名为“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 个查询逐步完成,这对我来说很难,因此我需要在这方面有一些帮助。
解决方案
以下将解决问题。由于您要并行获取三个文档,并且该get()
方法是异步的并返回一个 Promise,因此您需要使用Promise.all()
. 请注意,results
数组的顺序与promises
数组相同(因此第一个元素results
是especialidade
文档,然后是medico
等)。
请注意,我已将集合名称改编为英文。只需修改以使用您自己的集合名称。文档 ID 也将适应您的。
var db = firebase.firestore();
var promises = []
var especialidadeQuery = db.collection('specialties').doc('xTWQVLM8O9WRx89LS1Ba').get();
promises.push(especialidadeQuery);
var medicoQuery = db.collection('doctors').doc('CP5Gd2UwGyDYqs9eXuGl').get();
promises.push(medicoQuery);
var patienteQuery = db.collection('patients').doc('AMZpmX9BOyRlfPQpwfmz').get();
promises.push(patienteQuery);
Promise.all(promises).then(results => {
results.map(docSnapshot => {
console.log(docSnapshot.data());
});
});
但是请注意,如果您只需要患者、医生和专业的姓名,您可以将这些值直接存储在议程文档中。这种反规范化机制在 NoSQL 数据库中非常常见,并且允许优化查询(这里是 1 而不是 1+3)。
推荐阅读
- google-bigquery - 报表的数据源可以通过大查询程序吗?
- c# - 使用 Polly 在 ASP.NET Core 中重试请求时出现“流已被消耗”错误
- javascript - 带有快速服务器的 React 应用程序仅显示空白页面
- typescript - 如何在 Typescript 文件中导入 Svelte 组件?
- yosys - Yosys ASIC 合成流 QoR/PPA 指标
- python - TypeError:“CRS”类型的参数不可迭代
- kubernetes - 如何在集群中执行 kubectl 命令
- amazon-web-services - AWS Beanstalk 中的应用程序在开始后 40 分钟内处于 INFO 状态
- python - 幂律分布和 Barabasi-Albert 模型的指数;指数值
- javascript - 调用 alert(array.length) 时 JavaScript 未定义