首先,我是Firebase数据库的新手,来自SQL背景。
我正在尝试查询一个查询,以返回指定postID
的所有通知,无论该通知是针对哪个用户的。
基本上,如果有人删除了他们的帖子,我想删除发送给所有关注者的所有“新帖子”通知。
我已经尝试过这些索引。
{
"rules": {
".read": "auth != null",
".write": "auth != null",
"notification": {
"$user_id": {
".indexOn": ["timestamp", "objectId"]
}
}
}
}
我可以使用以下代码通过timestamp
进行查询,并且效果很好。
dbRef.GetChild("notificaton").GetChild(userID).GetQueryOrderedByChild("timestamp");
但是,我不想在查询中使用userID
来发布通知。我已经搜索并尝试了一些其他配置来获取索引,但是我在firebase db admin中仅收到错误消息,指出索引存在问题。
我相信这是因为我确实需要按timestamp
进行查询,因此该索引需要保留。因此,对于同一集合,我需要两个索引,但由于user_id
索引不需要postID
,因此配置不同。
我不确定无论如何objectId
,都需要如何配置索引才能在user_id
上进行查询。
我也尝试过类似的方法。
{
"rules": {
".read": "auth != null",
".write": "auth != null",
"notification": {
".indexOn": ["objectId"]
},
"notification": {
"$user_id": {
".indexOn": ["timestamp"]
}
}
}
}
但是我收到错误消息Error saving rules: 'notification' occurs multiple times.
我已经尝试过了。
{
"rules": {
".read": "auth != null",
".write": "auth != null",
"notification": {
"$user_id": {
".indexOn": ["timestamp"]
},
".indexOn": ["objectId"]
}
}
}
Firebase似乎还可以,因为它不会给出错误,但是也不会返回任何数据,我认为这是因为objectId
不在根notification
集合上
所以我被困住了。
答案 0 :(得分:2)
如果要将索引添加到每个子节点timestamp
和objectId
的每个用户中,可以使用以下方法:
{
"rules": {
"notification": {
"$user_id": {
".indexOn": ["objectId", "timestamp"]
}
}
}
}
这允许您向用户查询具有匹配的objectId的子节点,或者根据时间戳查询用户的子节点。
Firebase查询始终返回运行它们的位置的直接子节点。这意味着查询的orderByChild()
子句必须指向每个直接子节点的单个属性的固定路径。换句话说:您无法查询树。
在您的情况下,这意味着您无法通过单个查询搜索所有用户的通知。如果要允许该查询,则需要存储所有用户的通知列表。