Как запрашивать вложенные объекты в Firebase?

Я пытаюсь создать строку запроса, поэтому ответ от Firebase возвращает только строки с соответствующим userId (Не на верхнем уровне).
Цель состоит в том, чтобы получать заказы только для пользователя, который в данный момент вошел в систему.

Мой объект Javascript выглядит так:

const order = {
  itemId: "9T9WvJBbHiQpqyWdhBO0yX7lRny1"
  price: 5.3,
  customer: {
    userId: "-L9EyOPFB2PnyAPFUH9M",
    name: "demo user",
    address: "some place in earth",
  }
}

В Firebase у меня есть такие правила:

{
  "rules": {
    "orders": {
      ".read": "auth != null",
      ".write": "auth != null",
      ".indexOn": ["userId"]
    }
  }
}

Однако это явно не работает, так как индекс указывает на верхний уровень.

Вот URL, который я создал для вызова API:

const queryParams = `?auth=${token}&orderBy="userId"&equalTo="${userId}"`;

axios
  .get('/orders.json' + queryParams)
  .then(res => {
    // get orders for the currently logged-in user
  })
  .catch(err => {
    console.error(err);
  });

Если я подниму userId на один уровень выше, все будет работать нормально, но клиент и аутентифицированный пользователь используют один и тот же идентификатор, поэтому я предпочитаю держать их в одном объекте.

Можно ли запрашивать данные с вложенным индексом в Firebase?
Если да, то какие правила и строку запроса следует использовать?


person FisNaN    schedule 05.04.2018    source источник


Ответы (1)


Вы хотите сделать заказ на orderBy="customer/userId".

Вам также необходимо определить индекс для этого вложенного поля, что делается следующим образом:

{
  "rules": {
    "orders": {
      ".read": "auth != null",
      ".write": "auth != null",
      ".indexOn": ["customer/userId"]
    }
  }
}

Только что быстро подтвердил последний ответ на ответ Тома здесь.

person Frank van Puffelen    schedule 05.04.2018
comment
Ух ты. Оно работает. Есть ли справочная документация для этого? Я пытался использовать "$" для их подключения, так как он используется в mongoDB :( - person FisNaN; 05.04.2018