Firebase Firestore中的'Reference'数据类型有什么好处?
Firebase Firestore中的'Reference'数据类型有什么好处?
我正探索新的Firebase Firestore,并且它包含一种称为reference
的数据类型。我不清楚这是什么作用。
- 这是类似于外键吗?
- 它可以用来指向某个处于其他地方的集合吗?
- 如果
reference
是真实的参考,我可以将其用于查询吗?例如,我可以有一个指向用户的引用,而不是将userId存储在文本字段中吗?并且我可以使用此用户引用进行查询吗?
admin 更改状态以发布 2023年5月24日
以下是我在使用Firestore引用时实现的方法。
正如其他答案所说,它就像一个外键。然而,引用属性不返回所引用文档的数据。例如,我有一个产品列表,其中一个属性是userRef引用,它表示创建该产品的用户。获取产品列表后,我可以得到创建者的引用,但它并不提供该引用中用户的详细信息。我之前使用过其他具有指针的后端服务,其中有一个“populate:true”标志,它返回用户的详细信息而不仅仅是用户的引用ID,这在这里将会是很棒的一种改进(希望未来能够改进)。
以下是我使用的示例代码,用于设置引用以及获取产品列表集合,然后从给定的用户引用ID中获取用户详细信息。
在集合上设置引用:
let data = { name: 'productName', size: 'medium', userRef: db.doc('users/' + firebase.auth().currentUser.uid) }; db.collection('products').add(data);
获取集合(产品)和每个文档上的所有引用(用户详细信息):
db.collection('products').get() .then(res => { vm.mainListItems = []; res.forEach(doc => { let newItem = doc.data(); newItem.id = doc.id; if (newItem.userRef) { newItem.userRef.get() .then(res => { newItem.userData = res.data() vm.mainListItems.push(newItem); }) .catch(err => console.error(err)); } else { vm.mainListItems.push(newItem); } }); }) .catch(err => { console.error(err) });