将唯一ID添加到Firebase

时间:2017-01-31 01:39:47

标签: javascript firebase ionic-framework firebase-realtime-database angularfire2

如何在推送时为Firebase的每个条目添加uniqueId?现在我的代码看起来像:

      this.games.push({
                        game_name: data.gameName,
                        number_of_players: data.number_of_players,
                        random_id: this.randomId,
                        admin: data.admin,
                        first_name: data.your_name,
                        player_array: [this.combinePlayerName(this.firstName, this.admin)] 
                     })

我正在使用AngularFire2并获取对this.games的数据库引用:

constructor(public navCtrl: NavController, public alertCtrl: AlertController, af: AngularFire) {
    this.games = af.database.list('/games');
    this.ids = af.database.list('/games/random_id');
}

如何推送到数据库,而不是使用随机生成的Id获取看起来像这样的列表:

enter image description here

我得到了一个我知道并可以在客户端代码中选择的有意ID的列表?

1 个答案:

答案 0 :(得分:1)

有几种方法可以做到这一点:

获取push-id并将其存储在另一个节点中:

有一种方法可以在AngularFire push方法中获取当前的push-id。因此,您可以将“随机生成的ID”更改为您“了解”的ID。

this.games.push({
   game_name: data.gameName,
   number_of_players: data.number_of_players,
   random_id: this.randomId,
   admin: data.admin,
   first_name: data.your_name,
   player_array: [this.combinePlayerName(this.firstName, this.admin)] 
}).then((game) => {
   this.ids.push(game.key);
})

除此之外,您实际上可以使用set方法而不是push来更改按键:

this.af.database.object("games/"+this.randomId).set({
      game_name: data.gameName,
      number_of_players: data.number_of_players,
      random_id: this.randomId,
      admin: data.admin,
      first_name: data.your_name,
      player_array: [this.combinePlayerName(this.firstName, this.admin)]
    })

其中af包含注入的AngularFire模块

 constructor(public af : AngularFire) { }

即使这种方法运行正常,它还为您提供了创建唯一ID的另一项任务,即firebase可以从第一种方法为您执行的任务。

此外,如上面的评论所述,您可以使用 random_id 子节点查询列表。