我只是在探索新的 Firebase Firestore,它包含一个名为 reference
的数据类型。我不清楚这是做什么的。
- 它像外键吗?
- 它可以用来指向位于其他地方的集合吗?
- 如果
reference
是实际参考,我可以将其用于查询吗?例如,我可以有一个直接指向用户的引用,而不是将 userId 存储在文本字段中吗?我可以使用此用户参考进行查询吗?
原文由 Jürgen Brandstetter 发布,翻译遵循 CC BY-SA 4.0 许可协议
我只是在探索新的 Firebase Firestore,它包含一个名为 reference
的数据类型。我不清楚这是做什么的。
reference
是实际参考,我可以将其用于查询吗?例如,我可以有一个直接指向用户的引用,而不是将 userId 存储在文本字段中吗?我可以使用此用户参考进行查询吗?原文由 Jürgen Brandstetter 发布,翻译遵循 CC BY-SA 4.0 许可协议
使用 Firestore 中的引用在下面添加对我有用的内容。
正如其他答案所说,它就像一个外键。 reference 属性不返回参考文档的数据。例如,我有一个产品列表,其中一个 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) });
希望这可以帮助
原文由 Ben Cochrane 发布,翻译遵循 CC BY-SA 4.0 许可协议
13 回答12.9k 阅读
7 回答2.1k 阅读
3 回答2.6k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
2 回答1.3k 阅读✓ 已解决
6 回答1.2k 阅读✓ 已解决
6 回答1.1k 阅读
引用非常像外键。
当前发布的 SDK 无法存储对其他项目的引用。在一个项目中,引用可以指向任何其他集合中的任何其他文档。
您可以像使用任何其他值一样在查询中使用引用:用于过滤、排序和分页 (startAt/startAfter)。
与 SQL 数据库中的外键不同,引用对于在单个查询中执行连接没有用处。您可以将它们用于依赖查找(看起来像连接),但要小心,因为每个跃点都会导致到服务器的另一次往返。