此模型的 Firebase 替代数据库设计

标签 firebase google-cloud-platform google-cloud-firestore

我真的很难使用 Firestore 作为我的后端。由于每一个数据库设计,我都尝试以 Firebase 结束,不允许我需要的几乎任何子查询或嵌套过滤组合。

域很简单我有包含类别和语言的类(class),我想按类别和语言过滤这些类(class)。

到目前为止我已经尝试过:

集合:

[
    courses,
    categories,
    languages,
]

文档示例:

类(class)

{
    id: 'pQYYsU80iLgZqTiYLkJXwHL25873',
    title: 'Javascript II',
    teacherName: 'Bob',
    categories: ['javascript','nodejs'],
    languages: ['english','spanish']
}

类别

{
    id: 'QJMzrwEJ6vRtPBsfSOVxojTMuHk1',
    name: 'programming',
    subcategories: ['programming','javascript','php','nodejs'],
    keywords: ['computer', 'developing', 'web', 'developer', 'programming','javascript','php','nodejs']
}

语言

{
    id: 'AbMzrwC6vRRPBsfSOVx2jTMuHk1',
    name: 'english',
    code: 'en-US',
}

我想查询,即:所有关于'javascript'且以'english'提供的类(class)。但不可能在单个查询中获取它们,因为 array-contains 不能嵌套多次。

我无法通过获取多个查询来完成此操作,因为设备很快就会耗尽内存。

是否有任何域设计替代方案可以在单个查询中实现此目的?

最佳答案

But it is impossible to fetch them in a single query as array-contains cannot be nested multiple times.

是的,您只能使用一次array-contains。如果允许更改文档结构,则可以通过将数组数据类型更改为 Map 来解决此问题,如下所示:

{
    id: 'pQYYsU80iLgZqTiYLkJXwHL25873',
    title: 'Javascript II',
    teacherName: 'Bob',
    categories: {
        javascript = true,
        nodejs = true
    },
    languages: {
        english = true,
        spanish = true
    }
}

I want to query, i.e.: all the courses about 'javascript' and available in 'english'.

使用上面的架构,执行以下查询:

coursesRef
    .where("categories.javascript", "==", true)
    .where("languages.english", "==", true);

它将完美地工作。

关于此模型的 Firebase 替代数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68995386/

相关文章:

ios - swift 3 : tableView duplicating loaded images from Firebase

PHP FPM 终止 Cloud Run 中的每个请求

load-balancing - OPTIONS 中的请求正文出现问题,或者使用 Google 负载均衡器删除请求

ios - 如何在 TableViewController 中显示 Firestore 文档名称?

java - Cloud Firestore 保存带有不必要小数位的数字

node.js - 来自 firebasestorage.googleapis.com 和 storage.googleapis 的媒体链接之间的区别?

ios - Swift & Firebase - 无法转换类型为 '__NSDictionaryM' 的值

permissions - 使用 Ansible 创建 GCE 实例,权限问题

java - 关于 Firestore 是否有一些标志我可以检查数据是否在线/离线数据?

Javascript firebase firestore 函数未执行