Firebase问题,我需要从前两个节点中取出值

时间:2018-08-12 19:03:06

标签: javascript firebase firebase-realtime-database google-cloud-functions

我尝试实现以下目标:当count更改为“ 2”时,我需要将名为“ updates”的JSON推送到数据库中的特定位置的功能,并从PlayerQueue节点获取名称(0:“ Mik “,1:” Bg“等),然后将其作为“ id”放入数据库中。所以,问题是我需要它使用前两个节点(在这种情况下为0和1)并从中取出名称(Mik和Bg),并将它们分别作为id1和id2放入数据库中(在该数据库中,我只有一个id值,但稍后再添加),问题是我不知道如何从前两个节点中提取名称。

我的数据库:

click here to veiw my database

这是我的代码

import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
import { resolve } from 'url';
//Game/queue/{queueId}/PlayerCount
admin.initializeApp(functions.config().firebase);


exports.createGame = functions.database.ref('Game/queue/PlayerCount').onUpdate((change, context) => {

  const ref1 = admin.database().ref('/Game/queue/PlayerQueue').limitToFirst(1);
  var tmp:String = 'esh';
  ref1.once("value")
  .then(result => {

         tmp = result.val();
         console.log(tmp)


  var updates = {};
  updates['id'] = tmp
  updates['visible'] = {
    place: 'a1',
    sign: 'rock'
  };



  const after = change.after.val();

  if(after.count == 2){
    return admin.database().ref('/Game/allGames').push(updates);
  }  
  return null

}).catch(reason => {
  console.log(reason)
});  

  return null;

});

2 个答案:

答案 0 :(得分:0)

除非有充分的理由使用实时数据库,否则请使用Firestore。

请参阅Cloud Firestore触发文档,了解如何对.onUpdate进行操作。参见下面的documentation example

qty 2

答案 1 :(得分:0)

由于要查找队列中的前两个子节点,因此应按其ID排序,然后限制为获得2个子节点:

const query = admin.database().ref('/Game/queue/PlayerQueue').orderByKey().limitToFirst(2);

然后,您可以听取值:

query.once("value").then(snapshot => {
  snapshot.forEach(child => {
    console.log(child.key+": "+child.val());
  });
});

以上纯粹解决了“获取前两个子节点”的问题。

更新:要使两个孩子进入单独的变量,可以执行以下操作:

query.once("value").then(snapshot => {
  var first, second;
  snapshot.forEach(child => {
    console.log(child.key+": "+child.val());
    if (!first) {
      first = child.val();
    }
    else if (!second) {
      second = child.val();
    }
  });
  if (first && second) {
    // TODO: do something with first and second
  }
});