gpt4 book ai didi

javascript - 如何在使用 indexOn 从实时 firebase 过滤后删除子子项

转载 作者:行者123 更新时间:2023-12-05 05:54:01 24 4
gpt4 key购买 nike

我想删除 cat01 中的过期用户。所以我想从节点中过滤日期并仅删除该用户节点。以下是我的 Firebase 结构。

firebase Structre

我试过下面的代码。它显示成功。但是节点没有被删除。

deleteData: function (req, callback, res) {
{
let userId = req.User;

const db = firebase.database()

let usersRef = db.ref("Foreign/").child(userId).child("Category").child("Cat01")
usersRef
.equalTo(uid)
.once("value")
.then(function (snapshot) {
snapshot.forEach((childSnapshot) => {
usersRef.child(childSnapshot.key).remove();
});
});

方法二我也尝试过这种方式。但是它从 UserID 中删除了整个用户。但我只想在日期过期时删除 uid="u001"。它在 cat01 之前是成功的。我认为错误是由于索引引起的。我可以知道在那里访问索引的任何方法吗?

 deleteData: function (req, callback, res) {
{
let userId = req.User;

const db = firebase.database()


let usersRef = db.ref("Foreign/").child(userId).child("Category").child("Cat01")
usersRef.remove()
.then(function() {
console.log("succeeded!")
})
.catch(function(error) {
console.log("failed: ",error)
});

最佳答案

您在此处的查询中缺少 orderBy... 调用:

usersRef 
.equalTo(uid)
.once("value")
...

要对 uid 属性进行排序/过滤,请使用:

usersRef 
.orderByChild("uid") // 👈
.equalTo(uid)
.once("value")
...

为了使上述查询有效地工作,您需要将索引添加到您的安全规则中:

{
"rules": {
...
"Foreign": {
"$userId": {
"Category": {
"$categoryId": {
".indexOn": "uid"
}
}
}
}
}
}

关于javascript - 如何在使用 indexOn 从实时 firebase 过滤后删除子子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69750253/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com