【问题标题】:Creating Schema in Firebase database with NodeJS使用 NodeJS 在 Firebase 数据库中创建 Schema
【发布时间】:2019-06-03 06:18:26
【问题描述】:

我不是 JS/NodeJS 方面的专家,我有一些使用 express-mongoose 的经验。

现在,我更喜欢 MVC 方法,即创建模式并导入它。

由于 Firebase 数据库也恰好不是 sql 数据库,所以我决定完全按照我在 mongoose 中应该做的事情做,但不幸的是我无法理解。

至少可以说,我创建了 index.js,这是我的应用程序入口点。

根据 firebase 文档,我正在像这样初始化它 (index.js)

const admin = require("firebase-admin");

//Firbade config file 
const firebaseConfig = require("./functions-config.json")

admin.initializeApp({
    credential: admin.credential.cert(firebaseConfig),
    databaseURL: "https://functions-firebase-43a59.firebaseio.com"
})

const db = admin.firestore()

问题:我们可以像以前在 mongoose 中创建的那样在 firebase db 中创建模式吗

即这是在 NodeJS (models/user.js) 中创建猫鼬模式的示例

const mongoose = require('mongoose')

const userSchema = new mongoose.Schema({
    fullName: String,
    email: String,
    image: String, 
    gender: String,
    profile_id: String,
    createdAt: {type: Date, default: Date.now}
}) 


module.exports = mongoose.model('User', userSchema);

【问题讨论】:

  • 我在下面回答了 Q1。请为每个...问题打开单独的问题。
  • 一旦你去无模式你就不会回头,俗话说。 NoSQL 的重点是无模式,猫鼬在已经优雅的驱动程序面前只是一个臃肿的关系拐杖。它还鼓励您保持关系型思维模式,这种思维模式并不总是有助于在 nosql 世界 imo 中获得最佳性能 :)
  • @Dominic 当您分享您的评论时,我只是在输入另外两个问题。但是为什么无模式优于模式呢?坦率地说,我真的在思考为什么 firebase 是无模式的
  • 弗兰克,非常感谢您的回答。这是第二个问题stackoverflow.com/questions/54095750/… 另外,我已经编辑了当前问题并删除了其他两个问题:)

标签: javascript node.js firebase mongoose


【解决方案1】:

我们可以像以前在 mongoose 中创建的那样在 firebase db 中创建模式吗?

Firebase 附带两个数据库:实时数据库和 Cloud Firestore。这两个都是无模式 NoSQL 数据库。但在这两种情况下,您都可以使用数据库的服务器端安全规则来控制可以写入的数据类型。

对于实时数据库,请参阅documentation 和此classic video 了解介绍。你会特别想看看这里的.validate 规则。

对于 Cloud Firestore,请参阅 documentationepisode 6 in the Getting to know Cloud Firestore video series

【讨论】:

    【解决方案2】:

    您不需要事先创建方案。

    你可以像这样设置数据:

    firebase.database()
      .ref('users')
      .set({
        email,
      })
    

    【讨论】:

      【解决方案3】:

      是的,您可以使用class 在节点 js 中为 firestore 创建 db 架构。 Firestore ORM(对象关系映射器)有一些第三方库可用:

      【讨论】:

      • 嘿,谢谢,这对我很有帮助,因为我必须使用flask和firebase,所以我用相同的关键字和一个额外的关键字“pip”进行了搜索,这些包就是我的包寻找。
      【解决方案4】:

      如果您可以坚持相对扁平的数据结构,那么在我看来,将架构引入 Firestore 的最佳解决方案是使用单独的集合将架构存储为文档。然后,您可以使用云功能来验证数据和写入数据。这种方法的最大优点是您可以在运行时创建和修改模式。总体而言,这需要更多的工作,但可以省去很多麻烦。我使用这种方法制作了一个 CMS,它运行良好,并且与 MongoDB 相比非常具有成本效益。

      【讨论】:

      • 如何测量relatively flat 数据结构?
      • 你不衡量它。在这种情况下,“相对扁平”是一种比喻,其目的是强调所提出的解决方案需要考虑数据结构的嵌套程度,因为这个因素确实会影响性能。换句话说,这是一个建议:嵌套数据结构越少,这个解决方案就越有效。但是这里没有明确的界限,这取决于谁来执行调用。
      猜你喜欢
      • 2015-03-06
      • 1970-01-01
      • 2020-10-02
      • 1970-01-01
      • 1970-01-01
      • 2019-04-21
      • 1970-01-01
      • 2021-01-14
      • 2016-11-03
      相关资源
      最近更新 更多