![](/img/trans.png)
[英]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.