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