【问题标题】:Firebase: Mapping child key from one table to another tableFirebase:将子键从一个表映射到另一个表
【发布时间】:2017-10-30 05:47:32
【问题描述】:

我是 firebase 数据库的新手,我需要一些关于映射到两个表的帮助。

  1. 我有两个表格,机器人和模板。模板键分配给 robots 表下的子节点。 tables
  2. 在机器人表中,我想显示模板名称而不是键。 tables display
  3. 如何在分配给机器人时限制删除模板。

这是从 firebase db 获取的。

export class Robot {
$key: string;
title: string;
password: string;
otp: number;
roboid: string;
createdtimeStamp: number;
updatedtimeStamp: number;
createduser: string;
status: string;
assignedtemplate: string;}

export class Template {
$key: string;
title: string;
createdtimeStamp: number;
updatedtimeStamp: number;
createduser: string;
messages: string[];}

getRobosList(query?) {
return this.robosRef.snapshotChanges().map(arr => {
  return arr.map(snap => Object.assign(snap.payload.val(), {$key: snap.key}));
});

}

【问题讨论】:

  • 这可能对你的问题有一些答案firebase.google.com/docs/database/web/structure-data
  • @NoelKriegler 我意识到问题出在可观察数组上,我正在尝试用 rxjs 解决。现在,我使用 rxjs 订阅,终于可以从我的机器人表中打印密钥。我的代码是这样的“this.robots.subscribe(res => res.forEach(element) => { console.log(element.assignedtemplate); });”。现在我正在寻找一种使用该键从模板中提取标题的方法。

标签: javascript angular firebase firebase-realtime-database nosql


【解决方案1】:

看来问题在于我对 rxjs 和 observable 的理解。因此,我使用以下代码使用快捷方式来实现我的目标。

this.templates.subscribe(temp => {
  temp.forEach(item => {
    if ( item.$key === this.myassignedTemplate) {          
      this.selectedRobot.assignedtemplatename = item.title;
    }
  });
  this.rs.updateRobot(this.selectedRobot);
});
  1. 我展开一列来保存标题
  2. 订阅 firebase observable
  3. 在我的订阅中,我循环并与 myassignedtemplate 进行比较
  4. 从订阅更新到 firebase。

这就是结果。 final

这个stackoverflow 问题类似于我的问题。

也欢迎改进我的答案。 谢谢大家。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-09
    • 1970-01-01
    • 1970-01-01
    • 2016-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多