簡體   English   中英

在實時數據庫中將值的所有實例設置為 null:Firebase Cloud Functions

[英]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')執行該讀取。
  • 此代碼僅對具有正確值的節點使用查詢 select。 當您的用戶數量增加時,這會顯着降低數據庫負載(和成本)。
  • 此代碼首先將所有更新收集到單個 object 中,然后將它們作為一次調用發送到數據庫。
  • 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM