我正在探索新的Firebase Firestore,它包含一个名为reference的数据类型 . 我不清楚这是做什么的 .
它好像是外键吗?
它可以用来指向位于其他地方的集合吗?
如果 reference 是实际参考,我可以将其用于查询吗?例如,我可以有一个直接指向用户的引用,而不是将userId存储在文本字段中吗?我可以使用此用户参考进行查询吗?
reference
引用非常像外键 .
当前发布的SDK无法存储对其他项目的引用 . 在项目中,引用可以指向任何其他集合中的任何其他文档 .
您可以在查询中使用引用,例如任何其他值:用于过滤,排序和分页(startAt / startAfter) .
与SQL数据库中的外键不同,引用对于在单个查询中执行连接没有用 . 您可以将它们用于依赖查找(看起来像是连接),但要小心,因为每一跳都会导致另一次往返服务器 .
使用Firestore中的引用添加以下对我有用的内容 .
正如其他答案所说,它就像一把外键 . 但是,引用属性不会返回引用文档的数据 . 例如,我有一个产品列表,其中userRef引用作为产品的一个属性 . 获取产品列表,为我提供了创建该产品的用户的参考 . 但是它没有向我提供该参考中用户的详细信息 . 我之前使用其他后端作为带有指针的服务有一个“populate:true”标志,它给用户提供详细信息而不仅仅是用户的参考ID,这对我来说很有用(希望未来有所改进) ) .
下面是我用来设置引用以及获取产品列表集合的一些示例代码,然后从给定的用户引用ID获取用户详细信息 .
Set a reference on a collection:
let data = { name: 'productName', size: 'medium' } data.userRef = db.doc('users/' + firebase.auth().currentUser.uid); db.collection('products').add(data);
Get a collection (products) and all references on each document (user details):
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) });
希望这可以帮助
2 回答
引用非常像外键 .
当前发布的SDK无法存储对其他项目的引用 . 在项目中,引用可以指向任何其他集合中的任何其他文档 .
您可以在查询中使用引用,例如任何其他值:用于过滤,排序和分页(startAt / startAfter) .
与SQL数据库中的外键不同,引用对于在单个查询中执行连接没有用 . 您可以将它们用于依赖查找(看起来像是连接),但要小心,因为每一跳都会导致另一次往返服务器 .
使用Firestore中的引用添加以下对我有用的内容 .
正如其他答案所说,它就像一把外键 . 但是,引用属性不会返回引用文档的数据 . 例如,我有一个产品列表,其中userRef引用作为产品的一个属性 . 获取产品列表,为我提供了创建该产品的用户的参考 . 但是它没有向我提供该参考中用户的详细信息 . 我之前使用其他后端作为带有指针的服务有一个“populate:true”标志,它给用户提供详细信息而不仅仅是用户的参考ID,这对我来说很有用(希望未来有所改进) ) .
下面是我用来设置引用以及获取产品列表集合的一些示例代码,然后从给定的用户引用ID获取用户详细信息 .
Set a reference on a collection:
Get a collection (products) and all references on each document (user details):
希望这可以帮助