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

标签 javascript firebase firebase-realtime-database google-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()
        })
    })
})

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

这是我的数据库:

database

如何删除“游戏”下的第一行,在本例中为“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() 的多个 Promise。

关于javascript - 通过Cloud Functions删除Firebase中的第一个节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45128546/

相关文章:

javascript - 如何在javascript中创建标签?

javascript - 如何在 javascript 或 jQuery 中创建空白字符串 ("")?

javascript - 创建 Firestore 对象数组时出现问题

javascript - 如何从 web 上的 firebase 中提取所有 JSON

javascript - TypeError : action. Payload.map.size 不是一个函数

javascript - react : Props - Why does one work, 但另一个没有

ios - 安装失败 'cordova-plugin-firebase-authentication' : undefined

ios - 查询 Firebase 和过滤 FDataSnapshot 的正确方法

javascript - 调用 child_added 监听器时返回自动生成的 ID

java - 当我按下我的微调器时,我看到了我的数据,但是当我尝试选择它时,它没有设置数据?