Можно ли использовать Where In с запросом Group Collection в Firestore? - PullRequest
0 голосов
/ 04 апреля 2020

В моей базе данных:

-Пользователи (коллекция верхнего уровня):
--- user1 (do c):
---------- pets ( подколлекция):
-------------- pet1 (do c)
-------------- pet2 (do c)
--- user2 (do c):
---------- домашние животные (подколлекция):
------------ --pet3 (do c)
-------------- pet4 (do c)

Если у меня есть список идентификаторов: list("pet2", "pet3", "pet4)

Есть ли способ сделать что-то вроде этого и получить обратно список DocumentsSnapshots?

firestore.collectionGruop("pets")whereIn(FieldPath.documentId(), list)

Он работает с коллекцией root, но я не знать, возможно ли это с группой сбора

1 Ответ

1 голос
/ 04 апреля 2020

Запрос группы сбора - единственное место, где фильтр на FieldPath.documentId() работает не так, как вы ожидаете. Это из-за некоторых деталей о том, как этот токен на самом деле работает. В любом случае, если вы попытаетесь это сделать, вы получите сообщение об ошибке:

Неверный запрос. При запросе к группе сбора с помощью FieldPath.documentId () предоставленное значение должно приводить к допустимому пути к документу, но «x» - это не потому, что у него нечетное количество сегментов.

Если вы хотите чтобы выполнить фильтрацию идентификаторов документов в запросе группы коллекций, вам необходимо сохранить идентификатор документа в качестве значения поля в каждом документе. Если вы используете поле с именем «id», вы можете фильтровать это поле следующим образом:

firestore
    .collectionGruop("pets")
    .whereIn('id', list)

Это приведет к другой ошибке, говорящей о том, что вам нужно создать индекс, и даст вам ссылку сделать это. После того, как вы создадите этот индекс (это может занять некоторое время), вам следует набрать go.

См. Также: Как выполнить запрос группы сбора с использованием идентификатора документа в Cloud Firestore

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