firebase - Firestore 标签数据模型最佳实践(数组与字典)

标签 firebase data-structures google-cloud-firestore

我想根据用户输入的标签查询 firestore 中的一些帖子。每当用户提交帖子时,用户也会随之提交标签。我当前的数据结构如下所示:

postId: {
    tags: {
      "firebase": true,
      "angular": true,
      "cats": false
    }
}

但是,上述数据结构使得查询变得困难。我不能使用 arrayContainsAny 函数,必须下载所有标签并检查每个标签/键是否为真,然后返回帖子。但是,如果我将标签存储为数组:

postId: {
    tags: {
      0: "firebase",
      1: "angular",
      2: "cats"
    }
}

我可以使用 postsCollection.whereField("tags", arrayContainsAny: tagsArray) 之类的 firestore 函数来进行快速查询。

将标签存储为数组是否更有效或可扩展?

提前致谢!

最佳答案

在 NoSQL 类型数据库中建模数据的方法没有对错之分。建模的最佳实践始终取决于您要对其执行的查询。

听起来使用 map 对您的用例无效。您已经确定它会使您的查询变得困难,使用数组会更方便。在这种情况下,请使用数组,因为您知道它可以满足您的查询。

请记住,并非每个数据模型都能满足所有类型的查询。对于这种特殊情况,数组似乎更好,但您很容易遇到另一个查询根本无法正常工作的情况。

关于firebase - Firestore 标签数据模型最佳实践(数组与字典),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60803262/

相关文章:

firebase - firestore 是否支持事务中的集合级锁?

javascript - firestore 添加数据两次并且不让我拥有 UID

ios - firebase uid 总是返回 nil

algorithm - 创建平衡二叉搜索树的时间复杂度?

Java伪尾调用递归产生更好的性能

algorithm - 是否有解决 `size` 或 `height` 的二叉树问题的技巧?

node.js - 从服务器获取 json 数据后尝试将其呈现给客户端,但仅显示第一个元素

android - 无法应用插件 [类 'com.google.gms.googleservices.GoogleServicesPlugin'](对于输入字符串 : "+")

android - 从 firebase android 获取数据时项目终止

ios - Firebase RemoveObserver 方法不会删除观察者