如何解决实时数据库 - orderByChild() 适用于 once(),不适用于 get()
{
"rules": {
"users": {
".read": "auth.uid != null",".indexOn": ["time","timestamp"],"$uid": {
".write": "$uid === auth.uid",}
}
}
}
和带格式的数据
users
|_ uid
|_ time
|_ timestamp
当我使用 once()
执行查询(使用 Cloud Functions)时,它运行良好
await admin.database().ref("users").orderByChild("timestamp")
.once("value",(snapshot) => {
snapshot.forEach((childSnapshot) => {
functions.logger.log(childSnapshot.key);
});
});
但是当我使用 get()
await admin.database().ref("users").orderByChild("timestamp")
.get()
.then((snapshot) => {
snapshot.forEach((childSnapshot) => {
functions.logger.log(childSnapshot.key);
});
});
我收到以下错误:
错误:IndexMap.get 中没有为时间戳定义索引
请注意,当根本没有定义索引时,这不是相同的错误 - 在这种情况下,错误如下所示:
错误:索引未定义,为路径“/users”添加“.indexOn”:“timestamp”
我在定义索引后添加了新条目,所以所有数据都应该被索引(理论上)。当然我可以只使用 once()
但现在我不知道我的数据是否真的被索引了。有人可以对此有所了解吗?
解决方法
firebaser 在这里
这是 JavaScript SDK 中的一个已知问题,似乎也出现在 Node.js 的 Admin SDK 中。据我所知,目前还没有修复,但 once()
的解决方法确实有效。如果我知道更多有关该问题修复的信息,我会在此处发布。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。