当前位置: 首页 > 知识库问答 >
问题:

Firebase Firestore“引用”数据类型的优点是什么?

百里秋月
2023-03-14

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

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

共有2个答案

尉迟越
2023-03-14

下面添加了在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) });

希望这有帮助

冯通
2023-03-14

引用很像外键。

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

您可以像使用任何其他值一样在查询中使用引用:用于筛选、排序和分页(startat/startafter)。

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

 类似资料:
  • 本文向大家介绍什么是MySQL ENUM数据类型?使用ENUM数据类型有什么优势?,包括了什么是MySQL ENUM数据类型?使用ENUM数据类型有什么优势?的使用技巧和注意事项,需要的朋友参考一下 与标准数据类型不同,ENUM数据类型是1到65,535个字符串的枚举列表,指示字段的允许值。定义ENUM时,您将创建一个项目列表,必须从中选择该值(或者可以为NULL)。 例如,如果希望字段包含“ A

  • 本文向大家介绍索引的作用?和它的优点缺点是什么?相关面试题,主要包含被问及索引的作用?和它的优点缺点是什么?时的应答技巧和注意事项,需要的朋友参考一下 答:索引就一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。缺点是它减慢了数据录入的速度,同时也增加了数据库的

  • 问题内容: 在MySQL 5.7中,添加了用于在JSON表中存储JSON数据的新数据类型。显然,这将是MySQL的巨大变化。他们列出了一些好处 文档验证 -JSON列中只能存储有效的JSON文档,因此您可以自动验证数据。 有效访问 -更重要的是,当您将JSON文档存储在JSON列中时,它不会存储为纯文本值。相反,它以优化的二进制格式存储,从而可以更快地访问对象成员和数组元素。 性能 -通过在JSO

  • 本文向大家介绍C#中什么是值类型与引用类型?相关面试题,主要包含被问及C#中什么是值类型与引用类型?时的应答技巧和注意事项,需要的朋友参考一下 值类型:struct、enum、int、float、char、bool、decimal 引用类型:class、delegate、interface、array、object、string  

  • 问题内容: 我正在寻找提高某些SQL性能的方法,当前CTE正在脚本中多次使用和引用。我会使用表变量来获得改进吗?(因为代码在函数内,所以不能使用临时表)。 问题答案: 您实际上必须进行性能测试-没有“是/否”答案。根据安迪·利文(Andy Living)上面链接到的文章,CTE只是查询或子查询的简写。 如果您在同一函数中两次或多次调用它,则填充表变量然后加入该表变量或从中选择表变量可能会获得更好的

  • 在之前的 JavaScript 基础文章中(编号 02、编号 07),我们介绍过,变量有以下数据类型: 基本数据类型(值类型):String 字符串、Number 数值、Boolean 布尔值、Null 空值、Undefined 未定义。 引用数据类型(引用类型):Object 对象。 本文,我们针对这两种类型,做个详细介绍。我们先来看个例子。 基本数据类型举例: var a = 23;