Как получить документы, в каком объекте содержится ключ в Firestore? - PullRequest
0 голосов
/ 05 ноября 2018

Я создаю приложение Ionic, используя Firestore с Angularfire2.

Моя структура базы данных выглядит следующим образом:

- creators
  - CREATOR_ID
    - name (string)
    - description (string)
    - posts (map)
      - category1 (array)
        - [POST1, POST2, POST3]
      - category2 (array)
        - [POST3, POST4, ...]

Создатель может создавать сообщения / статьи. И когда создатель создает статью, он может указать, к каким категориям относится эта публикация!

Суть приложения в том, что, когда пользователь хочет отфильтровать по категории, он принесет всех СОЗДАТЕЛЕЙ, которые содержат хотя бы один пост в выбранной пользователем категории (вместо того, чтобы привести все статьи в эту категорию).

Итак, основываясь на приведенной выше структуре, я попробовал следующее:

this.afs.collection<Creator>('creators', ref => ref.where("posts.category1", '>', ""));

Но это ничего не возвращает!

У вас, ребята, есть предложения?

Спасибо!

1 Ответ

0 голосов
/ 05 ноября 2018

Как я вижу в вашей схеме базы данных, ваши category1 и category2 являются массивами. Следующий where() вызов функции:

.where("posts.category1", '>', "POST1")

Сработало бы, если бы ваши категории (category1 и category2) имели бы тип Map, а не массивы, и вас бы опрашивали для определенного поста. Для решения этой проблемы существует два подхода:

Первым из них будет изменение типа ваших категорий с array -> map и использование вышеуказанного строчного кода, а вторым будет использование:

.where("posts.category1", , "array-contains", "POST1")

Но учтите, что ни один из вышеперечисленных подходов не поможет вам найти, если массив содержит хотя бы один элемент. Для этого вы должны добавить слушателя и проверить, существует ли этот конкретный массив / карта.

См. здесь больше информации.

...