gpt4 book ai didi

firebase - 如何在节点中强制执行最大数量的子节点?

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

如何使用安全规则强制一个节点的最大子节点数?

/bar/customers/$customer/drinks_ordered

不应超过十五个 child 。

最佳答案

看起来您可以对订购的饮料使用数字 ID,然后尝试这样的操作;它会失败,因为 ID 是一个字符串:

"$customer_id": {
"drinks_ordered": {
"$drink_id": {
".validate": "$drink_id > 0 && $drink_id < 16" // error
}
}
}

相反,您可以使用计数器并将计数器验证为 1-15,然后验证饮料 ID 与计数器匹配。
"$customer_id": {
"counter": {
// counter can only be incremented by 1 each time, must be a number
// and must be <= 15
".validate": "newData.isNumber() && newData.val() > 0 && newData.val() <= 15 && ((!data.exists() && newData.val() === 1) || (newData.val() === data.val()+1))"
},
"drinks_ordered": {
// new record's ID must match the incremented counter
"$drink_id": {
// use .val()+'' because $drink_id is a string and Firebase always uses ===!
".validate": "root.child('bar/customers/'+$customer_id+'/counter').val()+'' == $drink_id"
}
}
}

自然地,您的饮料看起来像这样:
 /bar/customers/george_thorogood/counter/3
/bar/customers/george_thorogood/drinks_ordered/1/burbon
/bar/customers/george_thorogood/drinks_ordered/2/scotch
/bar/customers/george_thorogood/drinks_ordered/3/beer

现在,在客户可以添加另一种饮料之前,他们必须将计数器设置为 4(这是唯一可以设置的值),然后添加具有相同 ID 的饮料。

有点迂回,但它确实可以完成工作:)

关于firebase - 如何在节点中强制执行最大数量的子节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14919987/

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