我有一个用户列表,其中包含一个名为scannedCards
的节点,其中包含一个cardIds
数组。以下是一位用户的屏幕截图。
上面有多个用户,如果他们是equalTo(Some Card Id)
我想删除所有的卡ID,我希望一次性与所有用户一起使用。
以下是我使用的查询:
const ref = database.ref('users');
const query = ref.orderByChild('cardId').equalTo(cardId);
但结果总是空的,有人可以告诉我如何实现这个目标吗?
答案 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属性)。