Как получить указанные c документы из коллекции всех документов в коллекции в Firestore? - PullRequest
0 голосов
/ 20 апреля 2020

Итак, мои данные упорядочены следующим образом:

MyCollection                  //main collection       
  --(All documents)           //I want all documents of main collection
     --publicSubcollection    //I want ONLY publicSubcollection of those documents
        --(All documents)     //I want all documents of publicSubcollection

И вот как я делаю это в моем приложении:

 query = firestore().collection('MyCollection').doc().collection('publicSubcollection')
                .where('act', '==', 1)
                .where('city', '==', this.state.selected_city)
                .orderBy('update_time', 'desc')
                .limit(10);

            query.onSnapshot({
                 //do something
           })

и ничего не возвращается, пустой объект Я попытался вызвать REST Api с помощью Postman, и он также возвращает пустой объект. Я попытался вызвать только MyCollection, и он возвращает некоторые данные, которые у меня есть. Итак, как я могу на самом деле запросить документы в указанной подгруппе c? Что я делаю не так в этом коде?

1 Ответ

2 голосов
/ 20 апреля 2020

Никогда не имеет смысла использовать doc() без аргумента в запросе Firestore. Без аргумента он генерирует DocumentReference со случайным идентификатором документа. Этот идентификатор, безусловно, не будет существовать, и ваш запрос не даст никаких результатов. Если вы хотите запросить вложенную коллекцию, вы должны иметь возможность построить путь к этой вложенной коллекции, включая все идентификаторы документов в этом пути. В путях Firestore нет совпадений с подстановочными знаками. Другими словами, вам нужно передать в doc() строку, которая идентифицирует подколлекцию документа для запроса. Этот документ не должен существовать - его просто нужно назвать.

Если вы на самом деле пытаетесь запросить все документы в всех подколлекциях, называемых "publicSubcollection" вместо этого вам нужно будет использовать запрос группы сбора . Это может выглядеть так:

query = firestore()
    .collectionGroup('publicSubcollection')
    .where('act', '==', 1)
    .where('city', '==', this.state.selected_city)
    .orderBy('update_time', 'desc')
    .limit(10);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...