[英]How to access multiple Realtime Database instances in Cloud Functions for Firebase
[英]Set all instances of a value to null in Realtime Database: Firebase Cloud Functions
我想通过将用户 ID 转换为 null 来擦除连接到数据库中许多不同帖子键的特定用户 ID 的所有值。 用户 ID 附加到路径中的帖子键:我的数据库中的帖子/常春藤/用户 ID。 这是数据库的外观:
所以我决定运行以下 for 循环来过滤用户 ID 并将其转换为 null:
exports.wipeData = functions.https.onRequest(async (req, res) => {
const original = 'ppPXA8MvaSRVbmksof0ByOzTxJ92';
const snapshot = await admin.database().ref('/posts/ivies/userIDs/');
console.log((snapshot));
for (let value in snapshot.val) {
if (value == original) {
snapshot.val.set("null")
}
else {
console.log(value)
}
}
res.redirect(303, snapshot.ref.toString());
// [END adminSdkPush]
});
尽管此 function 已部署并运行,但它并没有像预期的那样将“ppPXA8MvaSRVbmksof0ByOzTxJ92”变为“null”。 谢谢您的帮助。
您的一般方法似乎很好,但是那里有一些错误。
这应该会更好:
exports.wipeData = functions.https.onRequest(async (req, res) => {
const original = 'ppPXA8MvaSRVbmksof0ByOzTxJ92';
const ref = admin.database().ref('/posts/ivies/userIDs/');
const query = ref.orderByValue().equalTo(original);
const results = await query.once('value');
const updates = {};
results.forEach((snapshot) => {
updates[snapshot.key] = null;
});
await ref.update(updates);
res.status(200).send(JSON.stringify(updates));
})
主要变化:
snapshot
变量尚不包含任何数据,因为您没有从数据库中读取数据。 我的代码中的once('value')
执行该读取。await
await ref.update(updates)
中的 await 可能是主要修复,因为它确保仅在数据库写入完成后才执行重定向。 我不熟悉 firebase 云函数,但在常规客户端 firebase 代码val
需要称为 function 的值,您必须等待参考值。 你可以试试:
exports.wipeData = functions.https.onRequest(async (req, res) => {
const original = 'ppPXA8MvaSRVbmksof0ByOzTxJ92';
const userIDs = await admin.database().ref('/posts/ivies/userIDs/');
userIDs.once("value", snapshot => {
var lookup = snapshot.val();
for (let key in lookup) {
var value = lookup[key];
if (key == value) {
userIDs.child(key).set(null);
}
}
res.redirect(303, userIDs.ref.toString());
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.