javascript - firebase indexOn 用于子值
问题描述
我正在尝试使用如下所示的 firebase Query 获得所有心情等于 M1 的帖子:
db.ref(`Recommendations`).orderByChild(`post/vote/moodTags/${idMood}/key`).equalTo(`${idMood}`).once('value').then(recs =>{
//Número de recs con el mood
let recsCount = recs.numChildren();
console.log(`Número de recs encontradas --> ${recsCount}`);
...
});
和 firebase 控制台显示警告:
FIREBASE 警告:使用未指定的索引。您的数据将在客户端下载和过滤。考虑将 /Recommendations 中的 ".indexOn": "post/vote/moodTags/M1/key" 添加到您的安全规则中以获得更好的性能。
但是,我在 firebase 站点的索引规则是:
"Recommendations":{
".indexOn": ["post/userFirebaseKey","post/user/firebaseKey","userFrom/firebaseKey","post/location/placeId","firebaseKey","placeId"],
"post":{
"vote":{
"moodTags":{
"$moodId":{
".indexOn": "key"
}
}
}
}
}
那么,当我使用子级别时,如何实际指定 indexOn 规则?
我的数据库:
+ Recommendations
+ idRec
property1:''
property2:''
property3:''
+ post
property21:''
...
+ vote
+ moodTags
+ M1
key:'M1'
name:''
url:''
+ M2
...
解决方案
您似乎在那里操作的级别太深了:毕竟您想要索引moodTags 列表,而不是一个moodTag 的内容。
这意味着您的规则必须看起来更像这样:
"Recommendations":{
".indexOn": ["post/userFirebaseKey","post/user/firebaseKey","userFrom/firebaseKey","post/location/placeId","firebaseKey","placeId"],
"post":{
"vote":{
"moodTags":{
".indexOn": "key"
}
}
}
}
}
您可以在Google Firebase 官方文档、Medium 上这篇有用的文章以及有人遇到类似问题的 Google Groups 帖子中阅读这些索引规则。
推荐阅读
- google-kubernetes-engine - Istio 虚拟服务 uri 匹配不起作用
- c - 使用 C 在连接 N 中检查对角线获胜者
- python - Python,如何比较不同的文件
- python-3.x - 从 imaplib 电子邮件中解析数据
- angular - angular8 es5子调用父方法调用this.method未定义
- python - 配置代理详细信息以连接到雪花
- python - 有麻烦的储蓄链接到带有硒的列表变量
- c++ - Microsoft Visual Studio Community 2019:致命错误 C1083:无法打开包含文件:'corecrt.h':没有这样的文件或目录
- node.js - 如何防止打字稿抱怨属性可以未定义
- blazor - 如何将类成员数据绑定到或 Blazor 的href 属性
?