Firebase数据库删除所有节点等于特定值

时间:2018-02-06 12:27:36

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

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

Below is a screenshot of one user

上面有多个用户,如果他们是equalTo(Some Card Id)我想删除所有的卡ID,我希望一次性与所有用户一起使用。

以下是我使用的查询:

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

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

1 个答案:

答案 0 :(得分:5)

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

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

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) } } }); 不是一个卡ID数组,因为键是对象ID,值是对象(包含cardId和userId属性)。