Firestore collectionGroup запрос возвращает пустой результат - PullRequest
0 голосов
/ 14 июня 2019

Моя база данных Firestore в настоящее время настроена так: Database

В группах есть участники (список пользователей), и я хочу запросить и найти все группы определенного пользователя. Я нашел, что запрос collectionGroup должен быть решением, и вот мой код для запроса.

let db = Firestore.firestore()
    let ref = db.collectionGroup("members").whereField("id", isEqualTo: userID)
    ref.getDocuments(completion: { (snapshot, error) in
        guard let snapshot = snapshot else { return }
        print(snapshot.documents.count) --> Always 0
    })

Я проследил за документацией и добавил индекс в базу данных: enter image description here

А также обновлены правила безопасности (приложение еще не общедоступно, поэтому правила являются просто заполнителями).

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
  match /{document=**} {
      allow read, write;
  }
  match /{path=**}/members/{doc} {
      allow read, write;
  }
  }
}

Нужна помощь в понимании того, почему (и исправление) запроса всегда возвращает пустой результат, когда ясно, что в базе данных есть группа с членом с соответствующим идентификатором пользователя.

Ответы [ 2 ]

2 голосов
/ 14 июня 2019

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

Это происходит потому, что member является свойством в вашем документе и не подколлекция.

Согласно официальной документации по запросам групп сбора в Firestore :

Группа сбора состоит из всех коллекцийс тем же идентификатором.По умолчанию запросы извлекают результаты из одной коллекции в вашей базе данных.Используйте запрос группы сбора для получения документов из группы сбора, а не из одной коллекции.

Поэтому, если вы хотите использовать запросы группы сбора, вам нужно изменить свойство member на вложенную коллекцию., где вы должны добавить member объектов, и только тогда ваш запрос будет работать.

Прежде чем использовать запрос группы сбора, не забудьте также создать индекс, который поддерживает ваш запрос группы сбора.

0 голосов
/ 14 июня 2019

Не помещайте элементы в качестве типа карты в поле, но в коллекцию.

После этого вы получите сообщение об ошибке в консоли с ссылкой для создания нужного индекса:

Для запроса требуется индекс COLLECTION_GROUP_ASC для сбора члены и идентификатор поля. Вы можете создать его здесь: https://console.firebase.google...

Дайте ему немного времени, прежде чем новый индекс вступит в силу.

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