通过 Cloud Functions 删除 Firebase 中的第一个节点

Delete first node in Firebase through Cloud Functions

这是我在云函数中的代码:

exports.PlayedMinigameSlot = functions.database.ref('/play/slot/{uid}/').onWrite(event => {
    if (!event.data.exists()) {
        return
    }
    const val = event.data.val()
    return db.ref(`/users/${event.params.uid}/server/slot/games/`).limitToFirst(1).once('value').then(function(slotValue) {
        const key = slotValue.key
        const wonIndex = slotValue.val()
        console.log(wonIndex)
        console.log(key)
        return db.ref(`/users/${event.params.uid}/server/slot/games/${key}`).remove().then(snap => {
            return event.data.adminRef.remove()
        })
    })
})

首先是我的控制台 return:null(对于 wonIndex),然后是“games”对于“key”。

这是我的数据库:

如何删除“游戏”下的第一行,在本例中为“1:1”

当您调用 limitToFirst() 时,您创建了一个查询。当您对 Firebase 数据库执行查询时,可能会有多个结果。所以快照包含这些结果的列表。即使只有一个结果,快照也会包含一个结果的列表。

您的代码需要处理此列表,但目前不需要。

return db.ref(`/users/${event.params.uid}/server/slot/games/`).limitToFirst(1).once('value').then(function(slotValues) {
  if (slotValue.exists()) {
    var location;
    slotValues.forEach(function(slotValue) {
      const key = slotValue.key
      const wonIndex = slotValue.val()
      location = `/users/${event.params.uid}/server/slot/games/${key}`;
    });
    return db.ref(location).remove().then(snap => {
      return event.data.adminRef.remove()
    });

  });
})

这纯粹适用于单个位置。如果您有更多位置,请使用单个多位置更新(使用 null 值来指示要删除的位置)或使用 Promise.all().

的多个承诺