Во-первых, я новичок в базе данных 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, что есть проблемы с моими индексами.
Я считаю, что это потому, что мне нужно сделать запрос по 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
.
Так что я застрял.