Невозможно использовать следующий запрос:
db.collectionGroup('likedBy').where(firebase.firestore.FieldPath.documentId(), '==', "User A").get();
И это потому, что запросы групп сбора работают только со свойствами документа и , а не с идентификаторами документов.Согласно официальной документации, касающейся запросов группы сбора :
db.collectionGroup('landmarks').where('type', '==', 'museum');
Вы запрашиваете подколлекцию landmarks
, где свойство type
содержит значение museum
.
Обходным путем может быть сохранение идентификатора пользователя в массиве и использование array-contains
, но помните, что для каждого используемого вами запроса группы сбора вам нужен индекс, и, к сожалению, вы не можете создать такой индекс программно.Даже если вы можете создать индекс в консоли Firebase, это не поможет вам, поскольку вы получаете эти идентификаторы динамически.Поэтому нельзя создать индекс для каждого пользователя отдельно, потому что вы очень быстро достигнете максимального количества индексов 1018 *.
Максимальное количество составных индексов для базы данных:200
Чтобы решить проблемы такого рода, вам следует рассмотреть возможность добавления массива под каждый объект пользователя и использовать такой запрос:
usersRef.where("usersWhoLikedMe", "array-contains", "someUserId")
Где usersWhoLikedMe
- это свойствотипа массив.