Firestore: получение документов, отсортированных по числовому полю, содержащемуся в двух документах подуровней - PullRequest
0 голосов
/ 25 января 2019

Моя фирма попросила меня получить все документы из корневой коллекции, users. Они должны быть отсортированы в соответствии со значением числового поля с именем amount, присутствующего в первом документе подуровня, а также во втором документе подуровня.

Я не знаю, как легко достичь этой цели с помощью запросов Firestore NoSQL. Что бы вы мне порекомендовали?

Структура данных

Вот оно:

  • Пользователи
    • user_1 (документ для получения и сортировки)
    • user_2 (документ для получения и сортировки)

Каждый из этих двух пользователей имеет такую ​​структуру:

  • collection_1
    • document_of_first_level
      • содержит это поле: amount
      • и содержит также эту коллекцию: collection_2
        • document_of_second_level
          • содержит это поле: amount

Итак, я должен получить список, содержащий user_1 и user_2. Это отсортированный список. Он отсортирован по двум полям с именами amount, которые содержатся в user_1, но также в user_2. Оба эти поля являются вложенными.

1 Ответ

0 голосов
/ 26 января 2019

Они должны быть отсортированы в соответствии со значением числового поля, заголовка суммы, присутствующего в первом документе подуровня, а также во втором документе подуровня.

Кактакже @DougStevenson, упомянутый в его комментарии, вы не можете достичь этого с Cloud Firestore.Невозможно получить документы из вложенной коллекции (уровень 1) и другой вложенной коллекции (уровень 2) в одном запросе.Firestore не поддерживает запросы разных подколлекций за один раз.Запросы в Firestore являются мелкими, что означает, что они получают только элементы из коллекции, для которой выполняется запрос.В одном запросе могут использоваться только свойства документов в одной коллекции.

Таким образом, самое простое решение, о котором я могу подумать, это запросить базу данных дважды, один раз, чтобы получить документы в рамках подколлекции (уровень 1) иво-вторых, чтобы получить документы в рамках подколлекции (уровень 2), а затем сравнить их на стороне клиента.

Идея из вашего комментария - это решение, поскольку добавление свойства в документ уровня 1 позволит вам запрашивать базу данных только один раз.В Firestore вы можете просто объединить несколько where() функций в одном запросе.

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