Многократный заказ в остальных api url - PullRequest
0 голосов
/ 13 мая 2018

Я сейчас работаю над Firebase, используя RESTful API.У меня есть пример данных, которые выглядят так:

{
  "user1" : {
    "Name" : "John Doe",
    "acctStatus" : "Pending",
    "Liked" : "Y"
  },
  "user2" : {
    "Name" : "Jane Doe",
    "acctStatus" : "Done",
    "Liked" : "Y"
  }
}

Итак, я пытаюсь получить данные, где acctStatus равно Pending, а Liked равно Y.Вот как выглядит мой api url

https://firebase.com/user.json?orderBy="acctStatus"&equalTo="Pending"&orderBy="Liked"&equalTo="Y"

Однако, когда я это делаю, я получаю оба user1 & user2.Почему это так?

1 Ответ

0 голосов
/ 13 мая 2018

Вы пытаетесь объединить несколько orderBy, что запрещено в Firebase. Это связано с тем, что слишком большое количество запросов отрицательно влияет на производительность, и Firebase хочет заставить вас оптимизировать структуру данных.

Так что есть несколько вариантов для вас отсюда. Прочтите этот пост, чтобы увидеть возможности базы данных в реальном времени: Запрос на основе нескольких предложений where в Firebase

Я бы порекомендовал вам один из этих двух подходов.

1. Используйте новый Cloud Firestore

Firebase недавно запустила свой новый Cloud Firestore, который в основном базируется на document. Это значительно упрощает структурирование ваших данных, и вы получаете возможность связывать queries без ущерба для производительности. Здесь вы можете узнать больше: https://firebase.google.com/docs/firestore/use-rest-api

и это еще один полезный дополнительный ресурс о том, как структурировать query: Начальный запрос API REST Firestore

2. Перестройте свою базу данных

Если вы решите реструктурировать свою базу данных, я бы порекомендовал вам одну из следующих структур.

Добавить статус узла:

{
  "pending": {
    "user1" : {
      "Name" : "John Doe",
      "Liked" : "Y"
    },
  },
  "done": {
    "user2" : {
      "Name" : "Jane Doe",
      "Liked" : "Y"
    }
  }
}

и теперь просто измените ваш запрос следующим:

https://firebase.com/pending.json?orderBy="Liked"&equalTo="Y"

или в качестве второго варианта вы можете сделать нас из комбинированного свойства, подобного этому:

{
  "user1" : {
    "Name" : "John Doe",
    "acctStatus" : "Pending",
    "Liked" : "Y",
    "queryProp" : "Pending-Y"
  },
  "user2" : {
    "Name" : "Jane Doe",
    "acctStatus" : "Done",
    "Liked" : "Y",
    "queryProp" : "Done-Y"
  }
}

, а затем просто закажите по queryProp:

https://firebase.com/user.json?orderBy="queryProp"&equalTo="Pending-Y"

Объединенное свойство легче поддерживать, поскольку вам не нужно перемещать данные при изменении status. Но имейте в виду, что вы всегда будете получать queryProp как часть ваших результатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...