什么是firestore参考数据类型适合哪些?

时间:2017-10-04 15:37:59

标签: firebase google-cloud-firestore

我正在探索新的Firebase Firestore,它包含一个名为reference的数据类型。我不清楚这是做什么的。

  • 是外国钥匙吗?
  • 它可以用来指向位于其他地方的集合吗?
  • 如果reference是实际参考,我可以将其用于查询吗?例如,我可以有一个直接指向用户的引用,而不是将userId存储在文本字段中吗?我可以使用此用户参考进行查询吗?

4 个答案:

答案 0 :(得分:73)

使用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) });

希望这有帮助

答案 1 :(得分:59)

引用非常像外键。

当前发布的SDK无法存储对其他项目的引用。在项目中,引用可以指向任何其他集合中的任何其他文档。

您可以在查询中使用引用,例如任何其他值:用于过滤,排序和分页(startAt / startAfter)。

与SQL数据库中的外键不同,引用对于在单个查询中执行连接没有用。您可以将它们用于从属查找(看起来像是连接),但要小心,因为每一跳都会导致另一次往返服务器。

答案 2 :(得分:2)

根据#AskFirebase https://youtu.be/Elg2zDVIcLo?t=276 目前的主要用例是Firebase控制台UI中的链接

答案 3 :(得分:0)

对于那些希望通过引用进行查询的Javascript解决方案的人-概念是,您需要在查询语句中使用“文档引用”对象

'received'

(对此处的回答表示敬意:https://stackoverflow.com/a/53141199/1487867