无法获取Firestore子集合

时间:2020-01-16 12:03:45

标签: reactjs firebase google-cloud-firestore

我正在React + Firebase中启动应用程序。我的问题是子集合数据未定义

我的消防站集合:

users - XXXXXXXXXX - name: xxxxx
                   ├ image: xxxxx
                   └ shifts - monday - before_noon: true
                                     ├ after_noon: false
                                     └ night: true

错误:

无法读取未定义的属性“星期一”

我的代码:

{user.shifts.monday.before_noon}

如何在Firestore中的子集合下调用数据。

1 个答案:

答案 0 :(得分:1)

子集合与Firestore文档中的嵌套数据不同。对于嵌套数据,您可以从单个文档访存中访问所有内容。示例:

const db = firebase.firestore();

await db.collection('users').doc('alice').set({
  name: 'Alice',
  shifts: {
    monday: {before_noon: true}
  }
});

// this is "true"
await db.collection('users').doc('alice').get()).data.shifts.monday.before_noon;

子集合是在逻辑上与父文档相关的完全独立的文档集合。您必须分别从子集合的父文档中获取子集合:

const userRef = db.collection('users').doc('alice');
const shiftsRef = userRef.collection('shifts');

await shiftsRef.doc('monday').set({
  before_noon: true
});

(await userRef.get()).data() // does not include .shifts
(await shiftsRef.get()).docs.map(snap => {
  day: snap.id, data: snap.data()
}); // [{day: 'monday', data: {before_noon: true}}]

通常,嵌套的数据应在数量有限的情况下使用,而您几乎总是希望将其与其余数据一起获取。 子集合在嵌套数据很多(即太大而无法容纳文档)时使用,或者并非总是需要与父数据一起获取数据的。