我正在React + Firebase中启动应用程序。我的问题是子集合数据未定义。
我的消防站集合:
users - XXXXXXXXXX - name: xxxxx
├ image: xxxxx
└ shifts - monday - before_noon: true
├ after_noon: false
└ night: true
错误:
无法读取未定义的属性“星期一”
我的代码:
{user.shifts.monday.before_noon}
如何在Firestore中的子集合下调用数据。
答案 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}}]
通常,嵌套的数据应在数量有限的情况下使用,而您几乎总是希望将其与其余数据一起获取。 子集合在嵌套数据很多(即太大而无法容纳文档)时使用,或者并非总是需要与父数据一起获取数据的。