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

enter image description here

Я пытаюсь получить все документы ("Spani sh", ...) в подгруппе group для всех групп и всех cards для каждой группы Следующее возвращает все документы для группы «Spani sh», но Как получить документы, если имя группы неизвестно и когда существует более одного

db.collection('usersx').doc(this.user.email).collection('group').doc('Spanish').collection('card').get()
  .then(querySnapshot => {
    querySnapshot.forEach(doc => {
      console.log(doc.id, ' => ', doc.data())
    })
  });

желаемый результат будет примерно таким:

[
  {
    "id":"...@gmail.com",
    "group":[
      {
        "Spanish":{
          "cards":[
            {
              "front":"huis",
              "back":"house"
            },
            {
              "front":"auto",
              "back":"car"
            }
          ]
        }
      },
      {
        "English":{
          "cards":[
            {
              "front":"test",
              "back":"test"
            },
            {
              "front":"bla",
              "back":"blabla"
            }
          ]
        }
      }
    ]
  }
]

1 Ответ

1 голос
/ 11 февраля 2020

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

То, что вы можете сделать, это добавить имя родителя как поле в документ карты, например, «languageField:» (безопасная операция, потому что она будет установлена ​​c), затем используйте его как часть запроса:

// to fetch ALL cards
db.collectionGroup('card').get()
  .then(querySnapshot => {
    querySnapshot.forEach(doc => {
      console.log(doc.id, ' => ', doc.data())
    })
  });

//to fetch SOME cards
db.collectionGroup('card').where(fieldRef:'languageField', opstr: '==', value: 'Spanish').get()
  .then(querySnapshot => {
    querySnapshot.forEach(doc => {
      console.log(doc.id, ' => ', doc.data())
    })
  });

Кстати, do c .ref содержит поле refPath, которое является полным путем FROM THE ROOT, который вы можете Для определения указанной языковой коллекции c, в которую входила карта, выполните синтаксический анализ. Я использую Сильно структурированную базу данных и все время использую этот подход, включая поиск родителя (ей) через refPath.

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