Как запросить подгруппу определенного идентификатора только из определенной родительской коллекции? - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть коллекции с именами quests и quizzes, у которых есть вложенные коллекции внутри документов с именем published, которые будут содержать различные опубликованные версии соответствующего документа.

  • квесты /
    • опубликовано /
  • викторины /
    • опубликовано /

quests и quizzes также помечены, и эти теги скопированы в опубликованный документ. Таким образом, все опубликованные документы имеют поле tags (массив строк).

Я хочу запросить все опубликованные квесты, связанные с данным тегом. Что-то в этом

db
  .collectionGroup('published')
  // This query is not correct, regex syntax doesn't work here for path.
  // I have added it to show that I want to query only the published 
  // documents inside quests.
  .where(
    firebase.firestore.FieldPath.documentId(),
    '==',
    '/quests/*/published/*'
  )
  .where(
    'tags',
    'array-contains',
    'kinematics'
  )

--- EDIT ---

это структура quests, и quizzes также имеет такую ​​же структуру. и это также имеет поле тегов.

  • квест при публикации версии 1.0 db structure of quests: version 1

  • квест при публикации версии 2.0 enter image description here

Я хочу получить все опубликованные квесты, связанные с определенным тегом, поэтому здесь квесты // опубликованные / 2.0 должны быть одним из полученных документов, если я сделаю запрос с тегом «физика», как версия 1.0, она не связана только с «кинематикой». Здесь добавлен скриншот только одного квеста. Есть несколько квестов с несколькими опубликованными версиями, относящимися к тегу, который я хочу запросить. Я хочу получить их все, кроме документов из викторин / / опубликовано / с помощью одного запроса.

1 Ответ

1 голос
/ 08 февраля 2020

Эта часть вашего запроса невозможна:

  .where(
    firebase.firestore.FieldPath.documentId(),
    '==',
    '/quests/*/published/*'
  )

FieldPath.documentId() просто не может использоваться в качестве фильтра в запросах группы сбора. Это известное ограничение. В Firestore также нет совпадений с подстановочными знаками.

Есть еще одна проблема с вашим требованием "исключить документы из опросов // опубликовано /". Запросы Firestore также не могут исключать определенные c элементы, основанные на неравенстве. Пожалуйста, прочитайте эту другую проблему для более подробной информации. То, что вы можете сделать, это сохранить имя коллекции верхнего уровня (например, "квесты") в поле в документах вложенной коллекции, а затем отфильтровать, чтобы сопоставить документы с этим полем. Но вы не можете исключить документы таким образом. Если вы хотите исключение, вам понадобится логическое поле, которое выражает это исключение, например «is_not_quiz», и установите его соответствующим образом для каждого документа, который не является тестом.

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