我使用unix时代时间戳作为键(防止对特定的秒进行双推,并按推送日期排序),和我希望阻止用户超过当前时间戳.。
"$timestamp": {
".write": "now/1000 - $timestamp > 0"
}数据库: database.rules.json:XX:XX:无效-表达式:右操作数不是数字。
正如文档中所述,键总是字符串。,不能将数字与键进行比较(好吧,文档用一个奇怪的级联示例.?)假装不同。
有没有办法将密钥解析为实时数据库规则中的一个数字,以便我可以将其用于每个比较运算符?
注意:下面是我当前的解决方法,它意味着冗余数据:
"$timestamp": {
".write": "now/1000 - newData.child('typed_timestamp').val() > 0",
"body":{},
"typed_timestamp": {
".validate": "newData.isNumber() && newData.val()+'' == $timestamp"
}
}发布于 2022-08-13 13:03:22
文档显示了一个字符串连接示例,其中表达式的左侧为字符串,使用+运算符将数字$room_id追加到右侧:
".validate": "root.child('room_names/' + $room_id).exists()"需要注意的是,左边的字符串确保字符串连接将发生,而不是数字数学。
您可以使用左边的空字符串和右边的数字,从数字创建字符串:
'' + (now/1000)另外,我要说的是,在实时数据库中,使用数字作为密钥并不是一个好主意。当使用数字作为键时,RTDB可能会将它们解释为数组索引,这意味着您的查询最终将生成数组而不是映射。这就是为什么数据库更喜欢使用字符串推送ID的原因之一。(此外,推送ID更有可能是真正独特的。)首选使用时间戳号值作为子值,然后在规则中使用该子值限制基于时间戳的写入。
https://stackoverflow.com/questions/73343905
复制相似问题