Firebase数据库将所有节点删除等于一个特定的值

By simon at 2018-02-07 • 0人收藏 • 30人看过

我有一个用户列表,其中包含一个名为scannedCards的节点 包含cardIds的数组。下面是一个screensho一个用户的t。 [![下面是一个截图 用户(https://i.stack.imgur.com/Ic08o.png)](https://i.stack.imgur.com/Ic08o.png)有多个用户喜欢上面,我想要删除所有的卡IDS,如果他们 是equalTo(Some Card Id),我想和我们一起一次。 下面是我使用的查询:

  const ref = database.ref('users');
  const query = ref.orderByChild('cardId').equalTo(cardId);
但结果总是空的,有人可以告诉我如何能实现这个?

1 个回复 | 最后更新于 2018-02-07
2018-02-07   #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亲perties)。

登录后方可回帖

Loading...