Как вы выбираете все документы (включая несуществующие документы предка) в коллекции Firebase? - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь получить все документы из коллекции 'users', но он извлекает только 'fred' и 'lisa' и игнорирует все выделенные курсивом документы:

Для этих данных:

enter image description here

Попытка получить все документы:

enter image description here

Даст:

info: length 2
info: fred  =>  { gender: 'male', contacts: [ '' ] }
      lisa  =>  { contacts: [ '' ] }

В соответствии с документацией Firebase ( Firebase: Добавить и управлять данными ):

Предупреждение: даже если в консоли появляются несуществующие документы-предки,они не появляются в запросах и снимках.Вы должны создать документ, чтобы включить его в результаты запроса.

Примечание. Несуществующие пользователи-предки создаются автоматически, когда пользователь нажимает кнопку регистрации, которая вызывает firebase.auth().функция (fred и lisa были созданы вручную).

Как мне распечатать contacts каждого пользователя, если некоторые пользователи не отображаются в моих запросах?Нужно ли мне периодически запускать скрипт, который вручную заново добавляет всех пользователей, или есть более элегантное решение?

Ответы [ 2 ]

1 голос
/ 09 апреля 2019

Как вы упомянули, эти «документы» отображаются курсивом в консоли Firebase курсивом: это потому, что эти документы присутствуют (в консоли) только как «контейнер» одного или нескольких вложенных коллекций, но они не «подлинные» документы.

Фактически, если вы создадите документ непосредственно в коллекции col1 с полным путем doc1/subCol1/subDoc1, промежуточные документы не будут созданы (т. Е. Нет doc1 документа).

Консоль Firebase показывает этот вид «контейнера» (или «заполнителя») курсивом, чтобы «материализовать» иерархию и позволить вам перейти к документу subDoc1, но документ doc1 не существует в база данных Firestore.

Давайте рассмотрим пример: представьте себе документ doc1 в коллекции col1

col1/doc1/

и еще один subDoc1 в коллекции subCol1 (под-)

col1/doc1/subCol1/subDoc1

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

Итак, если вы хотите иметь возможность запрашивать эти родительские документы, вам придется создавать их самостоятельно, как указано в комментариях jackz314.

0 голосов
/ 28 апреля 2019

Если вы пытаетесь перечислить всех своих зарегистрированных пользователей из Firebase auth, вы можете использовать функцию Firebase SDK:

    function listAllUsers(nextPageToken) {
      admin.auth().listUsers(1000, nextPageToken)
        .then(function(listUsersResult){
          listUsersResult.users.forEach(function(userRecord) {
            console.log('user', userRecord.toJSON());
          })
          if (listUsersResult.pageToken) {
            // list next batch of users
          }
        })
        .catch(function(err) {
          console.log('Error listing users: ', error)
        });
    }

    listAllUsers();

через http://firebase.google.com/docs/auth/admin/manage-users#list_all_users

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