如何从Firestore中的子集合中检索文档

时间:2020-02-09 08:07:42

标签: vue.js google-cloud-firestore

enter image description here

我正在尝试检索所有组的子集合group和每个组的所有cards内的所有文档(“西班牙语”,...) 以下返回“西班牙文”组的所有文档 但是如果不知道组名并且存在多个时如何检索文档

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 个答案:

答案 0 :(得分:1)

您需要获取collectionGroup的“卡片”-集合组是跨整个域的 所有结构,并且没有办法限定“父”组中的集合。

您可以 做的是在卡文档中将父名称添加为 field ,例如“ languageField:”(安全操作,因为它是静态的)。 ,然后将其用作查询的一部分:

// 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())
    })
  });

顺便说一句,doc.ref包含一个字段refPath,这是FROM ROOT的完全限定路径,您可以解析该路径以查找卡所属的特定语言集合。我使用高度结构化的数据库,并一直使用这种方法,包括通过refPath查找父级。