这是我在云函数中的代码:
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”。
这是我的数据库:
如何删除“游戏”下的第一行,在本例中为“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/