Я хочу заказать по идентификатору магазина, но он возвращает:
"error": "Индекс не определен, добавьте ".indexOn": "shopId" для пути "/Products" в правила".
Буду признателен за любую помощь спасибо!
Правила :
{
"rules": {
".read": "now < 1609966800000", // 2021-1-7
".write": "now < 1609966800000", // 2021-1-7
"Products":{
"Records":{
".indexOn":["shopId"]
}
}
}
}
Код пирбазы:
result = db.child("Products").order_by_child("shopId").equal_to(shopId).get()
База данных Firebase Realtime может фильтровать только прямые дочерние узлы, на которых вы запускаете запрос. Значение, которое вы заказываете/фильтруете, должно находиться на фиксированном пути под каждым прямым дочерним узлом.
В вашей структуре данных у вас, кажется, есть два неизвестных ключа: UID
и unique_recordid
. Это означает, что вы не можете запрашивать shopId
из Products
.
Вы можете запросить записи для одного пользователя:
db.child("Products").child("UID of a specific").child("Records")
.orderByChild("shopId").equalTo("value of shopId")
Но вы не можете выполнить один и тот же запрос для всех Products
, поскольку путь свойства shopId
не одинаков для всех дочерних узлов Products
.
Также см. Двойной вложенный запрос Firebase
Если вы хотите запросить записи с определенным shopId
, вам понадобится в вашей базе данных плоский список именно этих узлов.
Records: {
"recordid1" : {
uid: "...",
productId: "...".
...
},
"recordid1" : {
uid: "...",
productId: "...".
...
}
}
Затем к этим данным вы можете запросить productId
и найти другие данные, включая UID, который теперь дублируется для каждой записи.