【问题标题】:Firebase database delete all nodes equalTo a particular valueFirebase 数据库删除所有节点 equalTo 特定值
【发布时间】:2018-07-16 12:29:27
【问题描述】:

我有一个用户列表,其中包含一个名为scannedCards 的节点,其中包含一个cardIds 数组。下面是一位用户的截图。

上面有多个用户,如果他们是equalTo(Some Card Id),我想删除所有卡ID,我想一次与所有用户一起这样做。

下面是我使用的查询:

  const ref = database.ref('users');
  const query = ref.orderByChild('cardId').equalTo(cardId);

但结果总是空的,有人可以告诉我如何实现这个吗?

【问题讨论】:

    标签: javascript firebase react-native firebase-realtime-database


    【解决方案1】:

    您上面列出的查询似乎没有返回任何内容,因为根据提供的屏幕截图,cardId 不是用户的直接子属性,而是scannedCards 列表下每个对象的属性用户可能有。

    如果您只需要在一次性操作中执行此操作,则可以运行如下操作:

    const ref = database.ref('users');
    ref.once('value').then(snapshot => {
      const users = snapshot.val();
      for (var user_id in users) {
        const scannedCards = users[user_id].scannedCards;
        for (var card in scannedCards) {
          if (scannedCards[card].card_id == "<some card id>") {
            firebase.database().ref(`users/${user_id}/scannedCards/${card_id}`)
            .set(null);
          }
        }
      }
    });
    

    如果您打算让已登录的用户删除他们扫描的卡片,那就简单一点:

    // user_id is for whoever is logged in
    const ref = firebase.database().ref(`users/${user_id}/scannedCards`);
    ref.once('value').then(snapshot => {
      const scannedCards = snapshot.val();
      for (var card in scannedCards) {
        if (scannedCards[card].card_id == "<some card id>") {
          firebase.database().ref(`users/${user_id}/scannedCards/${card_id}`)
          .set(null)
        }
      }
    });
    

    另外值得指出的是,scannedCards 不是卡片 ID 数组,因为键是对象 ID,值是对象(包含 cardId 和 userId 属性)。

    【讨论】:

    • 很好的答案帕特!另一种选择是添加将卡 ID 映射到顶级用户节点的附加数据。例如。 "-L4ey...": "n5Id..."。使用这种结构,您可以轻松地为给定卡片查找用户,然后在两个位置删除/更新它。
    • @FrankvanPuffelen,我想过,但后来我觉得这是一种不好的做法,不是吗?
    • 哪一部分是不好的做法。复制数据在 NoSQL 数据库中极为常见。请参阅NoSQL data modelingdenormalization is normalFirebase for SQL developers
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-11
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    相关资源
    最近更新 更多